cleaned up more code

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-08-03 10:31:18 -05:00
parent 3b2d52dcd3
commit 7dc21628af
2 changed files with 67 additions and 89 deletions

View File

@ -191,7 +191,6 @@ import Combine
checkboxHeightConstraint?.constant = checkboxSize.height
checkboxWidthConstraint?.constant = checkboxSize.width
updateCheckbox(viewModel: model)
}
public override func setupView() {
@ -215,7 +214,7 @@ import Combine
checkboxWidthConstraint = checkboxView.widthAnchor.constraint(equalToConstant: checkboxSize.width)
checkboxWidthConstraint?.isActive = true
updateCheckbox(viewModel: model)
updateCheckbox(model)
mainStackView.topAnchor.constraint(equalTo: topAnchor).isActive = true
mainStackView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
@ -224,7 +223,7 @@ import Combine
}
func ensureLabel(viewModel: ModelType) {
func updateLabels(_ viewModel: ModelType) {
//deal with labels
if model.shouldShowLabels {
@ -268,7 +267,7 @@ import Combine
public override func reset() {
super.reset()
updateCheckbox(viewModel: model)
updateCheckbox(model)
setAccessibilityLabel()
onChange = nil
}
@ -279,7 +278,7 @@ import Combine
/// Manages the appearance of the checkbox.
private var shapeLayer: CAShapeLayer?
private func getCheckboxBackgroundColor(viewModel: ModelType) -> UIColor {
private func getCheckboxBackgroundColor(_ viewModel: ModelType) -> UIColor {
var colors: (on: UIColor, off: UIColor)
if viewModel.disabled {
if viewModel.surface == .light {
@ -297,7 +296,7 @@ import Combine
return viewModel.on ? colors.on : colors.off
}
private func getCheckboxBorderColor(viewModel: ModelType) -> UIColor {
private func getCheckboxBorderColor(_ viewModel: ModelType) -> UIColor {
var colors: (on: UIColor, off: UIColor)
if viewModel.disabled {
if viewModel.surface == .light {
@ -315,7 +314,7 @@ import Combine
return viewModel.on ? colors.on : colors.off
}
private func getCheckboxCheckColor(viewModel: ModelType) -> UIColor {
private func getCheckboxCheckColor(_ viewModel: ModelType) -> UIColor {
var color: UIColor
if disabled {
if surface == .light {
@ -333,11 +332,11 @@ import Combine
return viewModel.on ? color : .clear
}
private func updateCheckbox(viewModel: ModelType) {
private func updateCheckbox(_ viewModel: ModelType) {
//get the colors
let backgroundColor = getCheckboxBackgroundColor(viewModel: viewModel)
let borderColor = getCheckboxBorderColor(viewModel: viewModel)
let checkColor = getCheckboxCheckColor(viewModel: viewModel)
let backgroundColor = getCheckboxBackgroundColor(viewModel)
let borderColor = getCheckboxBorderColor(viewModel)
let checkColor = getCheckboxCheckColor(viewModel)
if let shapeLayer = shapeLayer, let sublayers = layer.sublayers, sublayers.contains(shapeLayer) {
shapeLayer.removeFromSuperlayer()
@ -388,7 +387,6 @@ import Combine
//--------------------------------------------------
// MARK: - Actions
//--------------------------------------------------
open override func sendAction(_ action: Selector, to target: Any?, for event: UIEvent?) {
super.sendAction(action, to: target, for: event)
toggleAndAction()
@ -414,8 +412,7 @@ import Combine
//--------------------------------------------------
// MARK: - UIResponder
//--------------------------------------------------
//--------------------------------------------------
open override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
sendActions(for: .touchUpInside)
@ -424,14 +421,13 @@ import Combine
//--------------------------------------------------
// MARK: - State
//--------------------------------------------------
/// Follow the SwiftUI View paradigm
/// - Parameter viewModel: state
open override func onStateChange(viewModel: ModelType) {
let enabled = !viewModel.disabled
ensureLabel(viewModel: viewModel)
updateCheckbox(viewModel: viewModel)
updateLabels(viewModel)
updateCheckbox(viewModel)
setAccessibilityHint(enabled)
setAccessibilityValue(viewModel.on)
setAccessibilityLabel(viewModel.on)

View File

@ -25,11 +25,6 @@ import Combine
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
private var showTextSpacing: CGFloat {
showText ? 12 : 0
}
private var stackView: UIStackView = {
let stackView = UIStackView()
stackView.translatesAutoresizingMaskIntoConstraints = false
@ -60,7 +55,6 @@ import Combine
//--------------------------------------------------
// MARK: - Static Properties
//--------------------------------------------------
// Sizes are from InVision design specs.
public let toggleSize = CGSize(width: 52, height: 24)
public let knobSize = CGSize(width: 20, height: 20)
@ -68,7 +62,6 @@ import Combine
//--------------------------------------------------
// MARK: - Public Properties
//--------------------------------------------------
public var onChange: Blocks.ActionBlock?
@Proxy(\.model.on)
@ -78,7 +71,7 @@ import Combine
public var showText: Bool {
didSet {
if oldValue != showText {
ensureLabel()
updateLabel(model)
}
}
}
@ -99,7 +92,7 @@ import Combine
public var textPosition: VDSTextPosition {
didSet {
if oldValue != textPosition {
ensureLabel()
updateLabel(model)
}
}
}
@ -146,7 +139,6 @@ import Combine
//--------------------------------------------------
// MARK: - Computed Properties
//--------------------------------------------------
open override var isEnabled: Bool {
get { !model.disabled }
set {
@ -176,7 +168,6 @@ import Combine
//--------------------------------------------------
// MARK: - Constraints
//--------------------------------------------------
private var knobLeadingConstraint: NSLayoutConstraint?
private var knobTrailingConstraint: NSLayoutConstraint?
private var knobHeightConstraint: NSLayoutConstraint?
@ -186,9 +177,9 @@ import Combine
//functions
//--------------------------------------------------
// MARK: - Color
// MARK: - Toggle
//--------------------------------------------------
private func getToggleColor(viewModel: ModelType) -> UIColor {
private func getToggleColor(_ viewModel: ModelType) -> UIColor {
var colors: (on: UIColor, off: UIColor)
if viewModel.disabled {
if viewModel.surface == .light {
@ -206,7 +197,7 @@ import Combine
return viewModel.on ? colors.on : colors.off
}
private func getKnobColor(viewModel: ModelType) -> UIColor {
private func getKnobColor(_ viewModel: ModelType) -> UIColor {
var colors: (on: UIColor, off: UIColor)
if viewModel.disabled {
if viewModel.surface == .light {
@ -224,11 +215,48 @@ import Combine
return viewModel.on ? colors.on : colors.off
}
private func updateToggle(_ viewModel: ModelType) {
//private func
func constrainKnob(){
self.knobLeadingConstraint?.isActive = false
self.knobTrailingConstraint?.isActive = false
if viewModel.on {
self.knobTrailingConstraint = self.toggleView.trailingAnchor.constraint(equalTo: self.knobView.trailingAnchor, constant: 2)
self.knobLeadingConstraint = self.knobView.leadingAnchor.constraint(greaterThanOrEqualTo: self.toggleView.leadingAnchor)
} else {
self.knobTrailingConstraint = self.toggleView.trailingAnchor.constraint(greaterThanOrEqualTo: self.knobView.trailingAnchor)
self.knobLeadingConstraint = self.knobView.leadingAnchor.constraint(equalTo: self.toggleView.leadingAnchor, constant: 2)
}
self.knobTrailingConstraint?.isActive = true
self.knobLeadingConstraint?.isActive = true
self.knobWidthConstraint?.constant = self.knobSize.width
self.layoutIfNeeded()
}
let toggleColor = getToggleColor(viewModel)
let knobColor = getKnobColor(viewModel)
if viewModel.disabled {
toggleView.backgroundColor = toggleColor
knobView.backgroundColor = knobColor
constrainKnob()
} else {
UIView.animate(withDuration: 0.2, delay: 0.0, options: .curveEaseIn, animations: {
self.toggleView.backgroundColor = toggleColor
self.knobView.backgroundColor = knobColor
}, completion: nil)
UIView.animate(withDuration: 0.33, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.5, options: [], animations: {
constrainKnob()
}, completion: nil)
}
}
//--------------------------------------------------
// MARK: - Label Helper
// MARK: - Labels
//--------------------------------------------------
func ensureLabel() {
stackView.spacing = showTextSpacing
private func updateLabel(_ viewModel: ModelType) {
stackView.spacing = viewModel.showText ? 12 : 0
if showText {
if textPosition == .left {
stackView.insertArrangedSubview(label, at: 0)
@ -243,7 +271,6 @@ import Combine
//--------------------------------------------------
// MARK: - Lifecycle
//--------------------------------------------------
public override func updateView(_ size: CGFloat) {
super.updateView(size)
@ -255,9 +282,6 @@ import Combine
toggleView.layer.cornerRadius = toggleSize.height / 2.0
knobView.layer.cornerRadius = toggleSize.height / 2.0
ensureLabel()
}
public override func setupView() {
@ -276,7 +300,7 @@ import Combine
toggleView.layer.cornerRadius = toggleSize.height / 2.0
knobView.layer.cornerRadius = knobSize.height / 2.0
toggleView.backgroundColor = getToggleColor(viewModel: model)
toggleView.backgroundColor = getToggleColor(model)
toggleView.addSubview(knobView)
@ -288,7 +312,7 @@ import Combine
knobView.topAnchor.constraint(greaterThanOrEqualTo: toggleView.topAnchor).isActive = true
toggleView.bottomAnchor.constraint(greaterThanOrEqualTo: knobView.bottomAnchor).isActive = true
ensureLabel()
updateLabel(model)
stackView.addArrangedSubview(toggleView)
stackView.topAnchor.constraint(equalTo: topAnchor).isActive = true
stackView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
@ -299,8 +323,8 @@ import Combine
public override func reset() {
super.reset()
toggleView.backgroundColor = getToggleColor(viewModel: model)
knobView.backgroundColor = getKnobColor(viewModel: model)
toggleView.backgroundColor = getToggleColor(model)
knobView.backgroundColor = getKnobColor(model)
setAccessibilityLabel()
onChange = nil
}
@ -308,7 +332,6 @@ import Combine
//--------------------------------------------------
// MARK: - Actions
//--------------------------------------------------
open override func sendAction(_ action: Selector, to target: Any?, for event: UIEvent?) {
super.sendAction(action, to: target, for: event)
toggleAndAction()
@ -335,7 +358,6 @@ import Combine
//--------------------------------------------------
// MARK: - UIResponder
//--------------------------------------------------
open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
UIView.animate(withDuration: 0.1, animations: {
@ -362,7 +384,6 @@ import Combine
//--------------------------------------------------
// MARK: - Animations
//--------------------------------------------------
public func knobReformAnimation() {
UIView.animate(withDuration: 0.1, animations: {
self.knobWidthConstraint?.constant = self.knobSize.width
@ -373,56 +394,17 @@ import Combine
//--------------------------------------------------
// MARK: - State
//--------------------------------------------------
/// Follow the SwiftUI View paradigm
/// - Parameter viewModel: state
open override func onStateChange(viewModel: ModelType) {
let enabled = !viewModel.disabled
label.set(with: viewModel.label)
//private func
func constrainKnob(){
self.knobLeadingConstraint?.isActive = false
self.knobTrailingConstraint?.isActive = false
if viewModel.on {
self.knobTrailingConstraint = self.toggleView.trailingAnchor.constraint(equalTo: self.knobView.trailingAnchor, constant: 2)
self.knobLeadingConstraint = self.knobView.leadingAnchor.constraint(greaterThanOrEqualTo: self.toggleView.leadingAnchor)
} else {
self.knobTrailingConstraint = self.toggleView.trailingAnchor.constraint(greaterThanOrEqualTo: self.knobView.trailingAnchor)
self.knobLeadingConstraint = self.knobView.leadingAnchor.constraint(equalTo: self.toggleView.leadingAnchor, constant: 2)
}
self.knobTrailingConstraint?.isActive = true
self.knobLeadingConstraint?.isActive = true
self.knobWidthConstraint?.constant = self.knobSize.width
self.layoutIfNeeded()
}
let toggleColor = getToggleColor(viewModel: viewModel)
let knobColor = getKnobColor(viewModel: viewModel)
if viewModel.disabled {
toggleView.backgroundColor = toggleColor
knobView.backgroundColor = knobColor
constrainKnob()
} else {
UIView.animate(withDuration: 0.2, delay: 0.0, options: .curveEaseIn, animations: {
self.toggleView.backgroundColor = toggleColor
self.knobView.backgroundColor = knobColor
}, completion: nil)
UIView.animate(withDuration: 0.33, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.5, options: [], animations: {
constrainKnob()
}, completion: nil)
}
backgroundColor = viewModel.surface.color
isUserInteractionEnabled = !viewModel.disabled
setAccessibilityHint(enabled)
updateLabel(viewModel)
updateToggle(viewModel)
setAccessibilityHint(!viewModel.disabled)
setAccessibilityValue(viewModel.on)
setAccessibilityLabel(viewModel.on)
backgroundColor = viewModel.surface.color
isUserInteractionEnabled = !viewModel.disabled
setNeedsLayout()
layoutIfNeeded()
}