1

抱歉这个菜鸟问题,但我开始在objective-c中使用结构来处理CG数据类型。如果我创建一个新的 CGRect,并将其设置为某个 view.frame,它们现在是否指向内存中的同一事物?或者它们是两个独立的对象,如果我改变一个,我不会改变另一个?谢谢。

发生的事情是我正在创建一个 CGRect 并将其设置为我的 view.frame。然后根据数据,我更新frame.size.height。但是,在我的 else 语句中,我想把它改回原来的大小,所以如果我再选择一个不同的对象,它的框架就很大。似乎一旦我将框架设置为较小的尺寸,它就会保持在那个尺寸。

CGRect frameToCenter = self.SView.frame;
CGFloat originalHeight = self.SView.frame.size.height;
//CGFloat originalHeight = 500.0; //if I hardcode it works.

if ([self.array count] == 1) {
    frameToCenter.size.height = totalRowHeight;
}
else {
    frameToCenter.size.height = originalHeight;
}
self.SView.frame = frameToCenter;

我不想硬编码任何东西,但我想让基本功能正常工作,所以我从数组中只有 1 个开始。然后对于其他数字,视图将返回原始大小。但是一旦它遇到第一个 if 语句,它的高度就永远不会改变。我可以让它变回来的唯一方法是,如果我在这个块之前硬编码一个 CGFloat 值。

4

1 回答 1

1

首先,CGRect根本不是一个对象。听起来你知道这一点,但“它们是两个独立的对象”这个问题暗示了这一点的混淆。

由于您分配的是实际结构,而不是指向该结构的指针,因此分配将值从源复制到接收器。分配后,更改其中一个不会对另一个产生影响,除非您进行另一项分配。所以这段代码不会改变视图的框架:

CGRect myRect = myView.frame;
myRect.origin.x += 10.0;

如果我想更改框架,我需要另一行将更改的值分配回视图的框架:

myView.frame = myRect;
于 2011-06-15T16:44:49.430 回答