2012-01-19 7 views
4

私は独立したレイヤーとしてアプリケーション全体の上に追加したいUIViewControllerを持っています。だから私は、UIWindowに[self.window addSubview:viewController.view]を使ってアプリケーションデリゲートに追加しようとしました。UIViewController内のルートViewControllerは回転しません

しかし、ユーザーがデバイスを回転させると、私はビューコントローラでwillRotateToInterfaceOrientationイベントを取得しません。だから私はhereの提案をしてみました:私は、アプリケーションのデリゲートのウィンドウのルートビューコントローラのサブビューとして私のビューコントローラを追加しましたが、私のwillRotateToInterfaceOrientationはまだ呼び出されていません。

どうすればよいですか?

答えて

7

あなたのrootViewControllerはコンテナビューコントローラとして動作しています。

iOS 5.0以降では、カスタムUIViewControllerサブクラスがコンテナビューコントローラとして機能できるようになりました。 UINavigationControllerクラスとUITabBarControllerクラスは、UIKitによって提供されるコンテナビューコントローラの例です。コンテナビューコントローラの背後にあるアイデアは、子ビューコントローラとも呼ばれる含まれているビューコントローラからコンテンツのプレゼンテーションを管理することです。子コンテンツは、そのまま、またはコンテナビューコントローラによって管理される他のカスタムビューと一緒に表示できます。

自分が行っていることは、独自のビュー階層を実装しているため、その階層に沿ってUILifecycle-Eventsを渡す責任があります。 iOS> = 5.0では、このようなコンテナのViewControllerを作成することができ、

- (void)addChildViewController:(UIViewController *)childController 
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers 

などのメソッドをサポートしています。 iOS < 5.0の場合、残念ながら手動で行う必要があります。

2

rootViewControllerでは、independentLayerControllerへの参照を保持し、willRotateToInterfaceOrientationを転送する必要があります。

あなたのrootViewControllerがメッセージを受信し、independentLayerControllerのwillRotateToInterfaceOrientationを呼び出すことができます。

+0

これを自動的に行う方法はありませんか? willRotateが暗黙的に呼び出される親ビューコントローラに依存しないレイヤーを作成したい –

+0

私の理解にはあなたの仕事です。すべてのUIViewControllerでグローバルに呼び出されるイベントはありません。これはiOS 5で変わります。次の答えを見てください。 –

関連する問題