を使用しUINavigationController
てドリルダウンインターフェイスを表示するiPhoneアプリがあります。最初のビュー、次に別のビュー、最大4レベルの深さです。最初の3つのビューを縦向きに制限し、最後のビューだけを横向きに回転できるようにする必要があります。4番目のビューから3番目のビューに戻るときに、4番目のビューが横向きだったとき、すべてを縦向きに回転させたいと思います。
iOS 5ではshouldAutorotateToInterfaceOrientation:
、許容される向きに対してYESを返すように各ビューコントローラーで単純に定義しました。ビューコントローラー#4から#3に戻るときにデバイスが横向きに保持されていても、縦向きに戻ることを含め、すべてが上記のように機能しました。
iOS 6では、すべてのView Controllerが横向きに回転し、本来意図されていないものを壊します。iOS 6のリリースノートは言う
より多くの責任は、アプリとアプリのデリゲートに移動することです。現在、iOSコンテナ(など
UINavigationController
)は、子に問い合わせて、自動回転する必要があるかどうかを判断しません。[...]システムは、デバイスが回転するとき、またはビューコントローラーがフルスクリーンモーダルプレゼンテーションスタイルで表示されるときは常に、サポートされているインターフェイスの向きを最上部のフルスクリーンビューコントローラー(通常はルートビューコントローラー)に要求します。さらに、サポートされている方向は、このビューコントローラーがそのshouldAutorotate
メソッドからYESを返した場合にのみ取得されます。[...]システムは、アプリのsupportedInterfaceOrientationsForWindow:
メソッドによって返された値supportedInterfaceOrientations
と、一番上のフルスクリーンコントローラーのメソッドによって返された値を交差させることによって、向きがサポートされているかどうかを判断します。
そこで、私はをサブクラス化しUINavigationController
、MainNavigationController
ブール値のプロパティlandscapeOK
を与え、これを使用しての許容可能な向きを返しましたsupportedInterfaceOrientations
。次に、各View ControllerのviewWillAppear:
メソッドに次のような行があります
[(MainNavigationController*)[self navigationController] setLandscapeOK:YES];
私MainNavigationController
に望ましい行動を伝えるために。
ここで質問があります。ポートレートモードで4番目のビューに移動し、電話を裏返しにすると、横向きに回転します。次に、[戻る]ボタンを押して、ポートレートのみで機能する3番目のビューに戻ります。しかし、元に戻りません。それをどうやって行うのですか?
私は試した
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
でviewWillAppear
、私の3番目のビューコントローラのメソッドが、それは何もしません。これは呼び出すのに間違ったメソッドですか、それを呼び出すのに間違った場所ですか、それとも全体をまったく異なる方法で実装する必要がありますか?