经常使用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 } }
}
复制代码
参考链接:
- Change UIButton BorderColor in Storyboard