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