※本記事は、旧ブログからの再掲です。

UINavigationControllerとUITabBarControllerの両方を使用している場合の回転制御についてです。
※iOS6.0以降

iOS6.0からshouldAutorotateToInterfaceOrientation:メソッドがdeprecatedとなり、
新しく下記3つのメソッドが追加されました。
・shouldAutorotate
・supportedInterfaceOrientations
・preferredInterfaceOrientationForPresentation

画面回転を検出すると、まずshouldAutorotateメソッドが呼ばれ、
回転に対応する場合にはYES、しない場合にはNOを返却します。
shouldAutorotateでYESの場合に、supportedInterfaceOrientationsメソッドが呼ばれ、どの向きに対応するかを返却します。
preferredInterfaceOrientationForPresentationメソッドでは、複数の向きに対応している場合に初期表示画面の向きを指定します。

UITabBarControllerとUINavigationControllerを使用している場合、
iOS6.0以降では回転を検出すると、UITabBarControllerに通知が来ます。
そのため、各ビューで回転するかどうかを制御したい場合には、
その配下のビューへ通知し結果を受け取るようにします。
UITabBarControllerとUINavigationControllerはサブクラス化してオーバーライドする方法とカテゴリを追加する方法があります。
今回はカテゴリを追加する方法です。

■UITabBarControllerクラスにカテゴリ(AutoRotate)を追加

selectedViewControllerプロパティより、現在選択されているタブアイテムのコントローラーが取得できます。
そのコントローラーの指定に従います。

■UINavigationControllerクラスにカテゴリ(AutoRotate)を追加

visibleViewControllerプロパティより、現在表示されているビューを取得できます。
そのビューの指定に従います。

■UINavigationController配下のビュー

各ビューコントローラで画面回転に対応するか否か、どの向きに対応するかを指定できます。

 


Comments are closed.