经常使用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 }
}
}
