修改CocoaPods库:GMStepper增加新功能(一)

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.你编码的水平

这不是废话么… :)


郭东尼

猜你喜欢

转载自blog.csdn.net/mydo/article/details/81074940