1

初歩的な質問で申し訳ありませんが、私はCGデータ型のためにobjective-cで構造体を使い始めています。新しい CGRect を作成し、それを何らかの view.frame に設定すると、それらはメモリ内の同じものを指すようになりますか? それとも、これらは 2 つの別個のオブジェクトであり、一方を変更しても他方は変更しないのでしょうか? どうも。

何が起こっているのかというと、私は 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、オブジェクトではありません。あなたはそれを知っているように聞こえますが、「それらは2つの別々のオブジェクトですか」という質問は、その点で混乱を示唆しています.

構造体へのポインターではなく、実際の構造体を割り当てているため、割り当てにより値がオリジンからレシーバーにコピーされます。割り当ての後、それらの 1 つを変更しても、別の割り当てを行わない限り、もう 1 つの変更には影響しません。したがって、このコードはビューのフレームを変更しません:

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

フレームを変更したい場合は、変更された値をビューのフレームに割り当てるために別の行が必要です。

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