在UIView类中添加UIView舍入逻辑

时间:2017-07-04 04:20:38

标签: ios swift

我有一个自定义UIView,我将它添加到我的ViewController中,如下所示:

let myCustomView = Bundle.main.loadNibNamed("MyCustomView", owner: nil, options: nil) as! MyCustomView
myCustomView.layer.cornerRadius = 10
myCustomView.layer.masksToBounds = true

我绕过视角。但是我想知道,有没有办法在MyCustomView类中移动这个四舍五入的逻辑呢?

3 个答案:

答案 0 :(得分:4)

当您使用IB时,您可能会发现扩展UIView

更方便
extension UIView {
    @IBInspectable var borderColor: UIColor? {
        set {
            layer.borderColor = newValue?.cgColor
        }
        get {
            if let color = layer.borderColor {
                return UIColor(cgColor:color)
            } else {
                return nil
            }
        }
    }

    @IBInspectable var borderWidth: CGFloat {
        set {
            layer.borderWidth = newValue
        }
        get {
            return layer.borderWidth
        }
    }

    @IBInspectable var cornerRadius: CGFloat {
        set {
            layer.cornerRadius = newValue
            clipsToBounds = newValue > 0
        }
        get {
            return layer.cornerRadius
        }
    }
}

然后,您可以从“属性”检查器设置这些值。

enter image description here

答案 1 :(得分:2)

是 - 如果您正在使用自定义视图加载nib,则该笔尖很可能是指另一个类。如果是这种情况,您可以在类本身内移动逻辑。

A screenshot illustrating Xcode's Interface Builder

那就是说,我真的很喜欢Lawliet's suggestion使用IBInspectable属性创建UIView扩展。这种方法的缺点是每个视图现在都具有这些属性,这会产生一定的开销和冲突的可能性。

答案 2 :(得分:0)

你可以在你的UIView子类中做这样的事情:

class RoundedView: UIView {

    /*
    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code
    }
    */

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.layer.cornerRadius = 10
        self.layer.masksToBounds = true
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.layer.cornerRadius = 10
        self.layer.masksToBounds = true
    }

}

此外,如果您想传递自定义值而不是' 10'在cornerRadius属性中,您可以通过查看此处来尝试实现一个方便的初始化:

Override Init method of UIView in Swift