Commit edfe8046 by Orkhan Alikhanov

Considered disabled state for CheckButton/RadioButton

parent 28ee6886
......@@ -20,21 +20,35 @@ open class BaseIconLayerButton: Button {
}
}
open var normalIconColor: UIColor {
get {
return iconLayer.normalColor
}
set {
iconLayer.normalColor = newValue
open override var isEnabled: Bool {
didSet {
iconLayer.isEnabled = isEnabled
}
}
open var selectedIconColor: UIColor {
get {
return iconLayer.selectedColor
open func setIconColor(_ color: UIColor, for state: UIControlState) {
switch state {
case .normal:
iconLayer.normalColor = color
case .selected:
iconLayer.selectedColor = color
case .disabled:
iconLayer.disabledColor = color
default:
fatalError("unsupported state")
}
set {
iconLayer.selectedColor = newValue
}
open func iconColor(for state: UIControlState) -> UIColor {
switch state {
case .normal:
return iconLayer.normalColor
case .selected:
return iconLayer.selectedColor
case .disabled:
return iconLayer.disabledColor
default:
fatalError("unsupported state")
}
}
......@@ -95,6 +109,7 @@ open class BaseIconLayerButton: Button {
internal class BaseIconLayer: CALayer {
var selectedColor = Color.blue.base
var normalColor = Color.lightGray
var disabledColor = Color.gray
func prepareForFirstAnimation() {}
......@@ -103,8 +118,15 @@ internal class BaseIconLayer: CALayer {
func prepareForSecondAnimation() {}
func secondAnimation() {}
var isAnimating = false
var isSelected = false
private(set) var isAnimating = false
private(set) var isSelected = false
var isEnabled = true {
didSet {
selectedColor = { selectedColor }()
normalColor = { normalColor }()
disabledColor = { disabledColor }()
}
}
override init() {
super.init()
......@@ -187,7 +209,7 @@ internal extension CALayer {
func animate(_ keyPath: String, to: CGFloat, dur: TimeInterval = 0) {
let animation = CABasicAnimation(keyPath: keyPath)
animation.timingFunction = .easeIn
animation.fromValue = self.value(forKey: keyPath) // from current value
animation.fromValue = self.value(forKeyPath: keyPath) // from current value
animation.duration = dur
setValue(to, forKeyPath: keyPath)
......
......@@ -46,7 +46,7 @@ internal class CheckBoxLayer: BaseIconLayer {
override var selectedColor: UIColor {
didSet {
guard isSelected else { return }
guard isSelected, isEnabled else { return }
borderLayer.borderColor = selectedColor.cgColor
borderLayer.backgroundColor = selectedColor.cgColor
}
......@@ -54,11 +54,19 @@ internal class CheckBoxLayer: BaseIconLayer {
override var normalColor: UIColor {
didSet {
guard !isSelected else { return }
guard !isSelected, isEnabled else { return }
borderLayer.borderColor = normalColor.cgColor
}
}
override var disabledColor: UIColor {
didSet {
guard !isEnabled else { return }
borderLayer.borderColor = disabledColor.cgColor
if isSelected { borderLayer.backgroundColor = disabledColor.cgColor }
}
}
open override func prepare() {
super.prepare()
addSublayer(borderLayer)
......@@ -73,11 +81,11 @@ internal class CheckBoxLayer: BaseIconLayer {
}
override func prepareForFirstAnimation() {
borderLayer.borderColor = (isSelected ? selectedColor : normalColor).cgColor
borderLayer.borderColor = (isEnabled ? (isSelected ? selectedColor : normalColor) : disabledColor).cgColor
if isSelected {
borderLayer.borderWidth = borderLayerNormalBorderWidth
} else {
borderLayer.backgroundColor = normalColor.cgColor
borderLayer.backgroundColor = (isEnabled ? normalColor : disabledColor).cgColor
checkMarkLeftLayer.strokeEnd = 1
checkMarkRightLayer.strokeEnd = 1
}
......@@ -98,7 +106,7 @@ internal class CheckBoxLayer: BaseIconLayer {
}
override func prepareForSecondAnimation() {
borderLayer.backgroundColor = (isSelected ? selectedColor : .clear).cgColor
borderLayer.backgroundColor = (isSelected ? (isEnabled ? selectedColor : disabledColor) : .clear).cgColor
if isSelected {
borderLayer.borderWidth = borderLayerNormalBorderWidth
......
......@@ -29,7 +29,7 @@ internal class RadioBoxLayer: BaseIconLayer {
override var selectedColor: UIColor {
didSet {
guard isSelected else { return }
guard isSelected, isEnabled else { return }
outerCircle.borderColor = selectedColor.cgColor
centerDot.backgroundColor = selectedColor.cgColor
}
......@@ -37,12 +37,19 @@ internal class RadioBoxLayer: BaseIconLayer {
override var normalColor: UIColor {
didSet {
if !isSelected {
outerCircle.borderColor = normalColor.cgColor
}
guard !isSelected, isEnabled else { return }
outerCircle.borderColor = normalColor.cgColor
}
}
override var disabledColor: UIColor {
didSet {
guard !isEnabled else { return }
outerCircle.borderColor = disabledColor.cgColor
if isSelected { centerDot.backgroundColor = disabledColor.cgColor }
}
}
override func prepare() {
super.prepare()
addSublayer(centerDot)
......@@ -50,9 +57,9 @@ internal class RadioBoxLayer: BaseIconLayer {
}
override func prepareForFirstAnimation() {
outerCircle.borderColor = (isSelected ? selectedColor : normalColor).cgColor
outerCircle.borderColor = (isEnabled ? (isSelected ? selectedColor : normalColor) : disabledColor).cgColor
if !isSelected {
centerDot.backgroundColor = normalColor.cgColor
centerDot.backgroundColor = (isEnabled ? normalColor : disabledColor).cgColor
}
outerCircle.borderWidth = outerCircleBorderWidth
}
......@@ -68,7 +75,7 @@ internal class RadioBoxLayer: BaseIconLayer {
override func prepareForSecondAnimation() {
centerDot.transform = isSelected ? centerDotScaleForMeeting : .identity
centerDot.backgroundColor = (isSelected ? selectedColor : .clear).cgColor
centerDot.backgroundColor = (isSelected ? (isEnabled ? selectedColor : disabledColor) : .clear).cgColor
outerCircle.borderWidth = isSelected ? outerCircleBorderWidth * percentageOfOuterCircleWidthToStart : outerCircleFullBorderWidth
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment