iOS 8より前は、supportedInterfaceOrientationsおよびshouldAutoRotateデリゲートメソッドと組み合わせて以下のコードを使用して、アプリの向きを特定の向きに強制しました。以下のコードスニペットを使用して、プログラムでアプリを目的の向きに回転させました。まず、ステータスバーの向きを変更します。そして、モーダルビューを表示してすぐに閉じると、ビューが目的の方向に回転します。
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:vc animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
しかし、これはiOS 8では失敗しています。また、スタックオーバーフローでいくつかの回答を見てきましたが、iOS 8以降はこのアプローチを常に避けるべきであると人々から提案されました。
具体的には、私のアプリケーションはユニバーサルタイプのアプリケーションです。合計3つのコントローラーがあります。
First Viewコントローラ -iPadではすべての方向をサポートし、iPhoneではポートレート(ホームボタンを押した状態)のみをサポートする必要があります。
セカンドビューコントローラー -すべての状況でランドスケープのみをサポートします
サードビューコントローラー -すべての状況でランドスケープのみをサポートする必要があります
ページナビゲーションにはナビゲーションコントローラを使用しています。最初のビューコントローラーから、ボタンクリックアクションで、2番目のアクションをスタックにプッシュします。そのため、デバイスの向きに関係なく、2番目のビューコントローラーが到着すると、アプリは横向きにのみロックする必要があります。
以下は、2番目と3番目のビューコントローラーのmy メソッドshouldAutorotate
とsupportedInterfaceOrientations
メソッドです。
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscapeRight;
}
-(BOOL)shouldAutorotate {
return NO;
}
これの解決策、またはiOS 8の特定の方向でビューコントローラをロックするより良い方法はありますか?助けてください!!