2011-03-18 10 views
4

私は非常に簡単なことをするのに苦労しています。私はviewControllerとsubViewControllerを持っています。どちらもnibsからロードされたビューを持っています。明確にするために、親ビューは1024×748のサイズであり、サブビューはニブで640×480です。 ViewControllerののviewDidLoadでUIView setCenterの問題

私はそうのようなsubViewControllerのビューを追加します。

[self.view addSubview:self.subViewController.view]; 
NSLog(@"subview.frame:%@",NSStringFromCGRect(self.subViewController.view.frame)); 

ログ出力:

subview.frame:{{0, 0}, {640, 480}} 

その後、物事をテストするために、私は再配置しようとするsetCenterを使用します次のような同じ位置の親ビュー内のサブビュー:

CGPoint newCenter = CGPointMake(0,0); //should stay at the same position.. 
[self.subViewController.view setCenter:newCenter]; 
NSLog(@"after changing center.subview.frame:%@",NSStringFromCGRect(self.subViewController.view.frame)); 

のログ出力:

after changing center. subview.frame:{{-320, -240}, {640, 480}} 

は今、私は何かがニブでめちゃくちゃになっかもしれないという気持ちを持って、それがスプリング&ストラット/サイズ&位置オプションとは何かだ推測しています。私はそれがIBだと私はほとんど理解していない機能なので、私はそれがこれだけだと推測することができます。

この問題の原因は何ですか? IBでviewcontrollerのビューを設定して他のViewControllerのビューとの位置合わせを自動的に行う方法については、一般的なヒントがありますか?そして、物事を設定した後、setCenterは動的にそれらを動かす正しい方法ですか?

答えて

6

あなたの行っていることを考えれば、出力は正しいです。ポイント(0,0)が左上隅になります。サブビューの中心をこれに設定すると、サブビューの左上隅は実際に(-640/2, -480/2)になります。

私が見

[self.subViewController.view setCenter:CGPointMake(320.0,240.0)]; 
+0

[OK]を使用し、整列するために左上の角を得るために。私の誤解は、フレームの原点が左上のコーナーではなく中心と同じだと思ったということでした。愚かな間違い。 IBのビューの初期中心を設定する方法はありますか? – donalbain

+0

申し訳ありません。評価する矢印の下にあるチェックボタンに気付かなかった神に正直です。x_O – donalbain

+0

そこに心配はありません。 IBでは、Attributesウィンドウの3番目のタブ(ルーラー付き)に、サブビューの位置とサイズが示されます。こうすることで、プログラムやプログラムを使用しなくても、中央、辺またはコーナーを正確に揃えることができます。 – PengOne

0

問題は不明です。中心を0,0に設定した場合、フレームの起点は-320,240と思われます。おそらくあなたはCGRectを誤解していますか? CGRectは、原点とサイズで構成されています。フレームはCGRectです。フレーム、サイズ、センターはすべて関連しており、フレームの変更はサイズとセンターの変更、センターの変更フレームの変更を行います。