2011-08-24 13 views
1

私は2つのUIViewController、UIViewControllerParentとUIViewControllerChildを持っています。 UIViewControllerParent内部で私は子供コントローラをインスタンス化し、サブビューとしてのビューを追加します。サブビューの方向変更を処理する方法

UIViewControllerChild *child = [[UIViewControllerChild alloc] init]; 
[self.view addSubView:child.view]; 

今向きの変更は、親のみviewcontrollersのshouldAutorotateToInterfaceOrientationメソッドが呼び出されたときにのみ、親の向きが変わります。子のshouldAutorotateToInterfaceOrientationメソッドが呼び出されず、ビューが回転しないという正しい動作ですか?

もしそうなら、子ビューを回転させるための最良の方法は何ですか?自動的にレイアウトするように子コントローラを設定する方法があるはずです。

アドバイスはありますか?ここで

答えて

4

のみ親viewcontrollersのshouldAutorotateToInterfaceOrientation方法は、これは正常です

呼び出されます。親ビューのコントローラは、サポートされている方向を決定する責任があります。 Appleから:

注:あなたは別のビューコントローラへのサブビュー ように、1つのビューコントローラのUIViewのプロパティを追加できます。そうすることで、両方のビューが回転しますが、 親ビューコントローラは、 がサポートされている方向をshouldAutorotateToInterfaceOrientation メソッドで判断します。

あなたがチェックする他のいくつかのものも、そのリンクで詳しく説明されています。

+0

ちょうど私の問題が何だったかを明確にする。私はビューにではなく、ウィンドウ上のサブビューとして自分のビューを追加していました。 – Craigt

2

とき向きの変更異なるXIBsを示すを扱うアップルが提供するプロジェクトです:あなたはとき向きの変更前にサブビューを持参する場合は、このコードを使用し、それ以外の場合はhttps://developer.apple.com/library/ios/#samplecode/AlternateViews/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008755

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 

    if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { 

     [self.view bringSubviewToFront:portraitView]; 

    } else { 

     [self.view bringSubviewToFront:landscapeView]; 

    } 
} 

ヘッダーファイルに新しいUIViewを定義し、XIBファイルにリンクすることを忘れないでください。

0

ViewController内にViewControllerを作成しない方が良いです。

あなたの状況では、子ViewControllerのビューの参照をルートViewControllerに追加できます。ルートViewControllerによってすべて管理されたままにしておきます。

関連する問題