使用WillSet属性观察器更改值

时间:2017-03-17 18:43:34

标签: ios swift frame cgrect

我正在尝试创建一个UIView子类。在初始化中,我设置了我希望子类具有的最小和最大y轴原点值。此视图将以编程方式,用户手势或动画上下移动。我希望我可以使用 willSet 属性用户:

override var frame: CGRect {
    willSet {
        if newValue.origin.y > maximumOriginY {
            self.frame.origin.y = maximumOriginY
        }
        if newValue.origin.y < minimumOriginY {
            self.frame.origin.y = minimumOriginY
        }
    }
}

然而,它似乎没有做任何事情。我尝试过使用 DidSet 属性观察器,但这会在设置完成后重置原点,从而产生一个断断续续的动画。关于如何使用属性观察者或其他方式的任何想法?感谢

1 个答案:

答案 0 :(得分:6)

无法更改willSet观察者中的值。覆盖getter和setter可以工作:

override var frame: CGRect {
    get { return super.frame }
    set {
        var tempFrame = newValue
        tempFrame.origin.y = min(max(tempFrame.origin.y, minimumOriginY), maximumOriginY)
        super.frame = tempFrame
    }
}