@IBDesignable和@IBInspectable简单使用

简介

@IBDesignable和@IBInspectable是iOS8的新特性,可以实时渲染在interface builder上,并且直接修改就能发生变化。
因为UIView.layer.borderWidth、borderColor、cornerRadius这些属性在xib上是不能直接设置的,但是@IBDesignable和@IBInspectable利用运行时机制,可以把这些属性映射到xib上,同时还可以映射自定义的属性。
更底层的原理可以参考Nate Cook的文章

边框button的例子
import UIKit

@IBDesignable  //@IBDesignable关键字用来声明一个类是可以被设计的,可以实时渲染在interface builder 上
class BorderButton: UIButton {
  
  //@IBInspectable关键字用来声明一个属性,可以在interface builder上修改该属性,就可以实时渲染border的变化
    @IBInspectable var borderColor: UIColor = UIColor.black {
        didSet {
            layer.borderColor = borderColor.cgColor
        }
    }
    
    @IBInspectable var opacity: Float = 0.0 {
        didSet {
            layer.opacity = opacity
        }
    }
    
    
    @IBInspectable var borderWidth: CGFloat = 0.0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }
    
    @IBInspectable var cornerRadius: CGFloat = 0.0 {
        didSet {
            layer.cornerRadius = cornerRadius
        }
    }
}

下面为xib上的示例图,可以看到右边直接显示了我们在BorderButton类中自定义的IBInspectable属性,可以直接调整,就会实时渲染了


@IBDesignable和@IBInspectable简单使用_第1张图片
demo.png
View的阴影例子
import UIKit

@IBDesignable
class HeaderMiddleView: UIView {

    @IBInspectable var shadowColor: UIColor = UIColor.black {
        didSet {
            layer.shadowColor = shadowColor.cgColor
        }
    }
    
    @IBInspectable var shadowOpacity: Float = 0.0 {
        didSet {
            layer.shadowOpacity = shadowOpacity
        }
    }
    
    @IBInspectable var shadowOffset: CGSize = CGSize.init(width: 0, height: -3) {
        didSet {
            layer.shadowOffset = shadowOffset
        }
    }
    
    @IBInspectable var shadowRadius: CGFloat = 3.0 {
        didSet {
            layer.shadowRadius = shadowRadius
        }
    }
}

你可能感兴趣的:(@IBDesignable和@IBInspectable简单使用)