Skip to content

Instantly share code, notes, and snippets.

@starhoshi
Last active October 14, 2017 07:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save starhoshi/205ec846e6a2d8993621b4ce5a6edab8 to your computer and use it in GitHub Desktop.
Save starhoshi/205ec846e6a2d8993621b4ce5a6edab8 to your computer and use it in GitHub Desktop.
コードで綺麗に View かけた
import UIKit
class StatsInputView: UIView {
private let verticalStackView: UIStackView = {
let stackView = UIStackView()
stackView.distribution = .fillEqually
stackView.axis = .vertical
stackView.alignment = .fill
return stackView
}()
private let columnTitleStackView = RowStackView()
private let baseStatStackView = RowStackView()
private let ivStackView = RowStackView()
private let effortStackView = RowStackView()
private let realStackView = RowStackView()
private let emptyColumnTitleLabel = RowTitleLabel()
private let hTitleLabel = ColumnTitleLabel(text: "HP")
private let aTitleLabel = ColumnTitleLabel(text: "攻撃")
private let bTitleLabel = ColumnTitleLabel(text: "防御")
private let cTitleLabel = ColumnTitleLabel(text: "特攻")
private let dTitleLabel = ColumnTitleLabel(text: "特防")
private let sTitleLabel = ColumnTitleLabel(text: "素早")
private let baseStatTitleLabel = RowTitleLabel(text: "種族")
private let hBaseStatLabel = BaseStatLabel()
private let aBaseStatLabel = BaseStatLabel()
private let bBaseStatLabel = BaseStatLabel()
private let cBaseStatLabel = BaseStatLabel()
private let dBaseStatLabel = BaseStatLabel()
private let sBaseStatLabel = BaseStatLabel()
private let ivTitleLabel = RowTitleLabel(text: "個体")
private let hIVField = NumberTextField()
private let aIVField = NumberTextField()
private let bIVField = NumberTextField()
private let cIVField = NumberTextField()
private let dIVField = NumberTextField()
private let sIVField = NumberTextField()
private let effortTitleLabel = RowTitleLabel(text: "努力")
private let hEffortField = NumberTextField()
private let aEffortField = NumberTextField()
private let bEffortField = NumberTextField()
private let cEffortField = NumberTextField()
private let dEffortField = NumberTextField()
private let sEffortField = NumberTextField()
private let realTitleLabel = RowTitleLabel(text: "実数")
private let hRealField = NumberTextField()
private let aRealField = NumberTextField()
private let bRealField = NumberTextField()
private let cRealField = NumberTextField()
private let dRealField = NumberTextField()
private let sRealField = NumberTextField()
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(verticalStackView)
verticalStackView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
columnTitleStackView.addArrangedSubview(emptyColumnTitleLabel)
columnTitleStackView.addArrangedSubview(hTitleLabel)
columnTitleStackView.addArrangedSubview(aTitleLabel)
columnTitleStackView.addArrangedSubview(bTitleLabel)
columnTitleStackView.addArrangedSubview(cTitleLabel)
columnTitleStackView.addArrangedSubview(dTitleLabel)
columnTitleStackView.addArrangedSubview(sTitleLabel)
baseStatStackView.addArrangedSubview(baseStatTitleLabel)
baseStatStackView.addArrangedSubview(hBaseStatLabel)
baseStatStackView.addArrangedSubview(aBaseStatLabel)
baseStatStackView.addArrangedSubview(bBaseStatLabel)
baseStatStackView.addArrangedSubview(cBaseStatLabel)
baseStatStackView.addArrangedSubview(dBaseStatLabel)
baseStatStackView.addArrangedSubview(sBaseStatLabel)
ivStackView.addArrangedSubview(ivTitleLabel)
ivStackView.addArrangedSubview(hIVField)
ivStackView.addArrangedSubview(aIVField)
ivStackView.addArrangedSubview(bIVField)
ivStackView.addArrangedSubview(cIVField)
ivStackView.addArrangedSubview(dIVField)
ivStackView.addArrangedSubview(sIVField)
effortStackView.addArrangedSubview(effortTitleLabel)
effortStackView.addArrangedSubview(hEffortField)
effortStackView.addArrangedSubview(aEffortField)
effortStackView.addArrangedSubview(bEffortField)
effortStackView.addArrangedSubview(cEffortField)
effortStackView.addArrangedSubview(dEffortField)
effortStackView.addArrangedSubview(sEffortField)
realStackView.addArrangedSubview(realTitleLabel)
realStackView.addArrangedSubview(hRealField)
realStackView.addArrangedSubview(aRealField)
realStackView.addArrangedSubview(bRealField)
realStackView.addArrangedSubview(cRealField)
realStackView.addArrangedSubview(dRealField)
realStackView.addArrangedSubview(sRealField)
verticalStackView.addArrangedSubview(columnTitleStackView)
verticalStackView.addArrangedSubview(baseStatStackView)
verticalStackView.addArrangedSubview(ivStackView)
verticalStackView.addArrangedSubview(effortStackView)
verticalStackView.addArrangedSubview(realStackView)
}
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
}
extension StatsInputView {
private class RowStackView: UIStackView {
override init(frame: CGRect) {
super.init(frame: frame)
distribution = .fillEqually
axis = .horizontal
alignment = .fill
}
required init(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
}
private class ColumnTitleLabel: UILabel {
override init(frame: CGRect) {
super.init(frame: frame)
font = .systemFont(ofSize: 12)
textAlignment = .center
}
convenience init(text: String?) {
self.init(frame: .zero)
self.text = text
}
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
}
private class RowTitleLabel: UILabel {
override init(frame: CGRect) {
super.init(frame: frame)
font = .systemFont(ofSize: 12)
textAlignment = .center
}
convenience init(text: String?) {
self.init(frame: .zero)
self.text = text
}
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
}
private class BaseStatLabel: UILabel {
override init(frame: CGRect) {
super.init(frame: frame)
font = .systemFont(ofSize: 14)
text = "100"
}
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
}
private class NumberTextField: UITextField {
override init(frame: CGRect) {
super.init(frame: frame)
font = .systemFont(ofSize: 14)
}
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment