用WillSet Property Observer更改值
问题描述:
我正在尝试创建一个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属性观察器,但是这会在设置它之后重置原点,导致出现口吃动画。关于如何让这个与财产观察员或其他方式一起工作的任何想法?谢谢
答
无法更改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
}
}
这两个条件都这样认为。 –
帖子已被编辑。有一个错字 –