1. 程式人生 > >修改CocoaPods庫:GMStepper增加新功能(一)

修改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.你編碼的水平

這不是廢話麼…