追加: github ios6rotationsでこのプロジェクトにアクセスできます
iOS 6 での画面の回転について質問して申し訳ありませんが、これは本当にお尻の痛みです..そして、私はまだそれを完全に理解することはできません.
テスト アプリには、次のような単純なビューの階層があります。
私が達成しようとしているのは、青のコントローラーを横向きにのみ、赤のコントローラーを縦向きにのみ保持することです。
内部にそのようなコードを含む UINavigationController のサブクラスがあります。
@implementation CustomNavController
- (BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
- (NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
@end
私の青いコントローラーでは、これを実装しました:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
そして、赤のコントローラでこれ:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
今、私は次の動作をしています:
- 横向きで起動したアプリ (OK)
- ボタンを押すと、赤いコントローラーが横向きにも押されます (縦向きに表示する必要があるため、これは問題ありません)。
- 縦向きには正常に回転しますが、横向きには回転しません
- 赤いコントローラーをポートレート モードのままにしておくと、青いコントローラー (ランドスケープに制限されています) がポートレート モードで表示されます。
PSすべての回転メソッド(上記に投稿)が正常に呼び出されています(ちなみに、これらのメソッドが画面遷移ごとに何度も呼び出されるのはなぜですか-5〜6回)
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
プッシュで呼び出されない
plist には、すべて (縦方向の上下を除く) の向きが含まれます。
問題は、各コントローラーでサポートされている向きに回転を強制する方法です。
ios6 でローテーションを処理する 100% 動作するコードをここに (回答として) 投稿することをお勧めします (たとえば、SplitController を使用した iPad 用のコードがある場合)。いくつかの特定の状況を処理します。乾杯!
追加: これを横向きから縦向きへの回答として投稿しないでください。もっとエレガントな方法があることを願っています。