1.@IBInspectable
@IBInspectable(或是 Objective-C 中的 IBInspectable) 提供了访问旧有功能的新方式。
比如在以前我们为一个UIView切圆角时,可以在面板里设置它的运行时属性,以键值对的形式。如下图所示:

使用起来有点繁琐,而且没有拼写检查,一旦有个字母拼写错误,就会在运行时造成崩溃。所以很少使用。
现在有了@IBInspectable 就大为不同了。比如,我们可以在一个UIView的子类里,创建上面的三个属性,并用@IBInspectable 修饰。
@IBInspectable var cornerRadius: CGFloat = 0 {didSet {layer.cornerRadius = cornerRadiuslayer.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 = newValuelayer.masksToBounds = newValue > 0}}}
2.@IBDesignable
只需在类名前加上 @IBDesignable 的前缀(或是 Objective-C 里的 IB_DESIGNABLE 宏)。你在面板上设置的自定义的属性,就可以在画布上被实时渲染出来了。
@IBDesignableclass MyCustomView: UIView {...}

注意:如果用@IBDesignable修饰分类,是不会实时渲染的,这个比较可惜。
