我的视图控制器中有一个变量CGFloat x
。我用这个变量创建了一个框架:
CGRectMake(x,x,4*x,4*x)
更改x
时,我希望框架的值也可以更改,而无需任何手动更新。
我怎样才能做到这一点?
答案 0 :(得分:3)
无法“深度复制”CGFloat
,因为CGFloat
是原始类型,而不是对象。此外,CGRect
是struct
,而不是对象,因此它由4个CGFloat
一个接一个地存储。不是CGFloat
的引用,而是原始值本身。
但是,如果您将x
声明为视图控制器的属性:
@property CGFloat x;
然后,您可以覆盖x
的设置器来更新框架的值:
- (void)setX:(CGFloat)x {
_x = x;
self.myFrame = CGRectMake(x, x, x * 4, x * 4);
}
这样,每次使用x
更改self.x = whatever
时,都会调用setter方法并更新您的框架。
这基本上是最安全,最可靠的方法,只要您记得 仅按x
设置self.x = whatever
,如果您直接设置基础ivar _x
,则不会调用setter,框架也不会更新。
答案 1 :(得分:1)
你不能制作不可变数据的副本。所以你不能复制CGFloat.But如果你想在这种情况下改变你的框架,你需要在X属性的setter方法中设置你的框架。