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