根据CGFloat值的变化自动更新CGRect

时间:2013-05-20 07:42:36

标签: ios objective-c cgrect

我的视图控制器中有一个变量CGFloat x。我用这个变量创建了一个框架:

CGRectMake(x,x,4*x,4*x)

更改x时,我希望框架的值也可以更改,而无需任何手动更新。 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

无法“深度复制”CGFloat,因为CGFloat原始类型,而不是对象。此外,CGRectstruct,而不是对象,因此它由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方法中设置你的框架。