iOS自定义控件(@IBDesignable与@IBInspectable)

iOS自定义控件(@IBDesignable与@IBInspectable)

IBDesignable

任何一个我们自定义的控件(继承自UIView),在其类声明前加上 @IBDesignable。则当此控件添加到 Interface Builder时,Interface Builder 会在 canvas 上对它进行实时渲染。

IBDesignable 的用法示例

import UIKit


@IBDesignable
class WatchView: UIView {

    override func drawRect(rect: CGRect) {
        let context = UIGraphicsGetCurrentContext()
        let width = CGRectGetWidth(rect)
        let height = CGRectGetHeight(rect)

        let diameter = width < height ? width : height  - 2.0

        let x = (width - diameter) / 2.0
        let y = (height - diameter) / 2.0

        let watchRect = CGRectMake(x, y, diameter, diameter)

        // border

        CGContextSetLineWidth(context, 2.0)
        CGContextSetStrokeColorWithColor(context, UIColor.blackColor().CGColor)
        CGContextAddEllipseInRect(context, watchRect)
        CGContextStrokePath(context)
    }
}

以上代码自定义了一个UIView,并且在View中绘制了一个圆形
这是一个很普通的UIView,但由于加入了 @IBDesignable,当我们在把它加入到 Storyboard 中时,Interface Builder 会对其进行实时渲染。
如下图所示。
IBDesignable

IBInspectable

@IBInspectable 则可以用来自定义属性
比如我们常使用的layer.borderWidth, layer.cornetRadius

import UIKit

@IBDesignable
class CustomButton: UIButton {
    @IBInspectable var cornerRadius : CGFloat {
        get {
            return self.layer.cornerRadius
        }

        set (newValue) {
            self.layer.cornerRadius = newValue
        }
    }

    @IBInspectable var borderCorlor : UIColor {
        get {
            return UIColor(CGColor: self.layer.borderColor!)
        }

        set (newValue) {
            self.layer.borderColor = newValue.CGColor
        }
    }

    @IBInspectable var borderWidth : CGFloat {
        get {
            return self.layer.borderWidth
        }

        set (newValue) {
            self.layer.borderWidth = newValue
        }
    }
}

通过 @IBInspectable 定义的属性会出现在
IBInspectable

可以实时调整,再配合 IBDesignable ,可以将参数的调整实时渲染。

以下是,用 IBDesignable 与 IBInspectable 做的简易时钟控件及自定义的Button。
IBInspectable

相关代码可以在 https://github.com/lcllkzdzq/IBDesignableDemo 找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值