2017-03-17 53 views
0

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

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属性观察器,但是这会在设置它之后重置原点,导致出现口吃动画。关于如何让这个与财产观察员或其他方式一起工作的任何想法?谢谢

+0

这两个条件都这样认为。 –

+0

帖子已被编辑。有一个错字 –

回答

3

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