自動回転はiOS6で変更されています。iOS6
では、UIViewControllerのshouldAutorotateToInterfaceOrientation :メソッドは非推奨になりました。代わりに、 supportedInterfaceOrientationsForWindowメソッドとshouldAutorotateメソッドを使用する必要があります。
より多くの責任は、アプリとアプリデリゲートに移動することです。現在、iOSコンテナ(UINavigationControllerなど)は、自動回転する必要があるかどうかを判断するために子に相談しません。デフォルトでは、アプリとビューコントローラーでサポートされているインターフェイスの向きは、iPadイディオムの場合はUIInterfaceOrientationMaskAllに、iPhoneイディオムの場合はUIInterfaceOrientationMaskAllButUpsideDownに設定されています。
ビューコントローラでサポートされているインターフェイスの向きは時間の経過とともに変化する可能性があります。アプリでサポートされているインターフェイスの向きでさえ、時間の経過とともに変化する可能性があります。システムは、デバイスが回転するとき、またはビューコントローラがフルスクリーンのモーダルプレゼンテーションスタイルで表示されるときはいつでも、サポートされているインターフェイスの向きを最上位のフルスクリーンビューコントローラ(通常はルートビューコントローラ)に要求します。さらに、サポートされている方向は、このViewControllerがshouldAutorotate メソッドYES
から戻った場合にのみ取得されます。システムは、View Controllerでサポートされている方向と、アプリでサポートされている方向(ファイルまたはアプリデリゲートのapplication:supportedInterfaceOrientationsForWindow:メソッドによって決定される)を交差させて、回転するかどうかを決定します。Info.plist
システムは、アプリのsupportedInterfaceOrientationsForWindow:メソッドによって返される値を、最上位のフルスクリーンコントローラーのsupportedInterfaceOrientationsメソッドによって返される値と交差させることによって、方向がサポートされているかどうかを判断します。
setStatusBarOrientation :animated:メソッドは完全に非推奨ではありません。最上位のフルスクリーンビューコントローラのsupportedInterfaceOrientationsメソッドがを返す場合にのみ機能するようになりました0
。これにより、発信者はステータスバーの向きが一貫していることを確認する責任があります。
互換性のために、shouldAutorotateToInterfaceOrientation:メソッドをまだ実装しているビューコントローラは、新しい自動回転動作を取得しません。(つまり、サポートされている方向を決定するためにアプリ、アプリデリゲート、またはInfo.plist
ファイルを使用することにフォールバックしません。)代わりに、shouldAutorotateToInterfaceOrientation:メソッドを使用して、supportedInterfaceOrientationsメソッドによって返される情報を合成します。
willRotateToInterfaceOrientation :duration:、willAnimateRotationToInterfaceOrientation:duration:、didRotateFromInterfaceOrientation:メソッドは、それ自体でフルスクリーンプレゼンテーションを行うビューコントローラー(たとえば、 presentViewController:animated:completion:)では呼び出されなくなりました。
アプリがサブビューのレイアウトを管理するためにこれらのメソッドを使用していないことを確認する必要があります。代わりに、ビューコントローラのviewWillLayoutSubviewsメソッドを使用し、ビューの境界矩形を使用してレイアウトを調整する必要があります。
リファレンス-iOS6.0リリースノート
これがあなたを助けるかもしれないことを願っています