GMStepper库在iOS中作为具有一定定制外观效果的UI对象,可以很好地作为UIStepper的替代版本。
它的一个特点是其中自包含了Value的显示:
注意虽然GMStepper很像UIStepper但是并不是其子类,而是UIController的子类!
在我的App中需要对GMStepper做些扩展:
1.希望左右两边的按钮背景色可以分别设置
2.希望可以按条件屏蔽右边的按钮(或左边的按钮)
我们分别来看看应该如何完成这些扩展。
1.按钮背景色分别设置
打开GMStepper类,增加一个扩展,并添加2个方法:
extension GMStepper {
public func setRightButtonBgColor(_ color:UIColor){
rightButton.backgroundColor = color
}
public func setLeftButtonBgColor(_ color:UIColor){
leftButton.backgroundColor = color
}
}
在项目中我们可以直接调用:
stepper.setRightButtonBgColor(.red)
stepper.setLeftButtonBgColor(.green)
但是等一下,没那么简单!
当你运行App时你会发现Stepper左右按钮背景色的确不一样了,但是当你点击某个按钮时就会发现,颜色又变成默认的了。
原因是在每次点击后,GMStepper都会运行一个动画,在该动画中会重置按钮的背景色为默认颜色!
所以我们得分别创建两个属性:
public var leftButtonBgColor:UIColor?{
didSet{
if let color = leftButtonBgColor{
leftButton.backgroundColor = color
}else{
leftButton.backgroundColor = buttonsBackgroundColor
}
}
}
public var rightButtonBgColor:UIColor?{
didSet{
if let color = rightButtonBgColor{
rightButton.backgroundColor = color
}else{
rightButton.backgroundColor = buttonsBackgroundColor
}
}
}
然后修改动画中涉及到按钮背景色的地方:
if let color = leftButtonBgColor{
self.leftButton.backgroundColor = color
}else{
self.leftButton.backgroundColor = self.buttonsBackgroundColor
}
if let color = rightButtonBgColor{
self.rightButton.backgroundColor = color
}else{
self.rightButton.backgroundColor = self.buttonsBackgroundColor
}
2.屏蔽某个按钮
如果是将其禁用可能视觉上区别不太明显,还得设置禁用时按钮的外观。所以我们干脆将其隐藏吧!
但是又不能直接隐藏,那样的话原来按钮的位置就会空出来,感觉少了点什么!
所以我们不但要隐藏,还要调整中间Label的宽度,让其占据被隐藏按钮的位置。
在GMStepper扩展中加入如下方法:
public func hideRightButton(hide:Bool){
rightButton.isHidden = hide
}
找到GMStepper布局约束方法中的这一句:
label.frame = CGRect(x: buttonWidth, y: 0, width: labelWidth, height: bounds.size.height)
修改为如下内容:
if rightButton.isHidden{
label.frame = CGRect(x: buttonWidth, y: 0, width: labelWidth + buttonWidth, height: bounds.size.height)
}else{
label.frame = CGRect(x: buttonWidth, y: 0, width: labelWidth, height: bounds.size.height)
}
OK!现在我们可爱的GMStepper已经逐渐融入App了:
修改第三方库的难度,我觉得主要有2个方面,愿与君共勉:
1.别人编码的水平
2.你编码的水平
这不是废话么… :)