經常使用Storyboard的童鞋們應該比較清楚怎樣設定一個View在runtime中的屬性,比方說layer.cornerRadius
,layer.borderWidth
等。基本上大多數屬性都能直接在Keypath中進行設定,除了顏色相關的屬性。
辦法總是有的,有的童鞋會向惡勢力低頭,使用程式碼。
但是,除了使用程式碼以外,我們可以對UIView或者CALayer進行擴充套件,這是我從SO上找到的答案,通過extension為UIView
或者CALayer
新增一個UIColor
型別的屬性,然後在keypath中設定該屬性即可。
UIView
版:
// 除了設定color以外,還設定了其他幾個屬性,就避免keypath要寫長
extension UIView {
@IBInspectable var cornerRadius: CGFloat {
get { return layer.cornerRadius }
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
@IBInspectable var borderWidth: CGFloat {
get { return layer.borderWidth }
set { layer.borderWidth = newValue }
}
@IBInspectable var borderColor: UIColor? {
get { return UIColor(cgColor: layer.borderColor!) }
set { layer.borderColor = newValue?.cgColor }
}
}
複製程式碼
CALayer
版:
extension CALayer {
var borderColorFromUIColor: UIColor {
get { return UIColor(CGColor: self.borderColor!) }
set { self.borderColor = newValue.CGColor }
}
}
複製程式碼