【问题标题】:Changing Values with WillSet Property Observer使用 WillSet 属性观察器更改值
【发布时间】:2017-08-09 10:52:29
【问题描述】:

我正在尝试创建 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 属性观察器,但这会在设置原点后重置原点,从而导致动画卡顿。关于如何让它与财产观察者或其他方式一起工作的任何想法?谢谢

【问题讨论】:

  • 两种情况的想法相同。
  • 帖子已被编辑。有错别字

标签: ios swift frame cgrect


【解决方案1】:

无法更改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
    }
}

【讨论】: