1.@IBInspectable
@IBInspectable
(或是 Objective-C 中的 IBInspectable
) 提供了访问旧有功能的新方式。
比如在以前我们为一个UIView
切圆角时,可以在面板里设置它的运行时属性,以键值对的形式。如下图所示:
使用起来有点繁琐,而且没有拼写检查,一旦有个字母拼写错误,就会在运行时造成崩溃。所以很少使用。
现在有了@IBInspectable
就大为不同了。比如,我们可以在一个UIView的子类里,创建上面的三个属性,并用@IBInspectable
修饰。
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable var borderColor: UIColor? {
didSet {
layer.borderColor = borderColor?.CGColor
}
}
一旦这样做了,我们就能在Interface Builder 的观察面板(inspector panel)里看到这些属性,并编辑它们了。
支持修饰的属性类型有: 布尔、字符串、数字、以及 CGPoint、CGSize、CGRect、UIColor 和 NSRange,额外增加了 UIImage。
还可以为UIView
添加一个扩展,来使属性在面板可见,以后可以直接这是圆角了,是不是很赞!
extension UIView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
}
2.@IBDesignable
只需在类名前加上 @IBDesignable
的前缀(或是 Objective-C 里的 IB_DESIGNABLE
宏)。你在面板上设置的自定义的属性,就可以在画布上被实时渲染出来了。
@IBDesignable
class MyCustomView: UIView {
...
}
注意:如果用@IBDesignable
修饰分类,是不会实时渲染的,这个比较可惜。