我的视图控制器中有一个变量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 个组成。不是对CGFloats 的引用,而是原始值本身。
但是,如果您声明x为视图控制器的属性:
@property CGFloat x;
然后你可以覆盖 setterx来更新你的框架的值:
- (void)setX:(CGFloat)x {
_x = x;
self.myFrame = CGRectMake(x, x, x * 4, x * 4);
}
这样,每次更改xusingself.x = whatever时,都会调用 setter 方法并更新您的框架。
这基本上是最安全最可靠的方式了,只要记得只设置xbyself.x = whatever,如果_x直接设置底层的 ivar,setter 不会被调用,frame 也不会更新。
你不能复制不可变数据。所以你不能复制 CGFloat。但是如果你想在这种情况下改变你的框架,你需要在 X 属性的 setter 方法中设置你的框架。