1. ホーム
  2. ios

[解決済み] iOS 8でビューコントローラの向きを強制的に変更するには?

2022-04-27 01:50:15

質問

iOS 8以前は、以下のコードに サポートされるインターフェイスの方向性 べき乗 デリゲートメソッドを使用すると、アプリの向きを強制的に特定の向きに変更することができます。以下のコードを使って、プログラムでアプリを好きな向きに回転させることができます。まず、ステータスバーの向きを変えています。そして、モーダルビューを表示し、すぐに解除することで、ビューを希望の方向に回転させています。

[[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で失敗しています。また、stack overflowでいくつかの回答を見ましたが、iOS 8以降では常にこの方法を避けるべきであると示唆されています。

具体的に言うと、私のアプリケーションはユニバーサルタイプのアプリケーションです。全部で3つのコントローラがあります。

  1. 最初のViewコントローラ - iPadでは全ての向きに、iPhoneでは縦向き(ホームボタンが下)のみに対応する必要があります。

  2. 2つ目のビューコントローラ - すべての条件下で、ランドスケープライトのみをサポートする必要があります。

  3. 第3のビューコントローラ - すべての条件下で、ランドスケープライトのみをサポートする必要があります。

ページナビゲーションにナビゲーションコントローラーを使用しています。最初のビューコントローラーから、ボタンをクリックするアクションで、2番目のビューコントローラーをスタックにプッシュしています。そのため、2つ目のビューコントローラーが到着すると、デバイスの向きに関係なく、アプリは右方向にのみロックされるはずです。

以下は、私の shouldAutorotatesupportedInterfaceOrientations メソッドを、2番目と3番目のビューコントローラに追加します。

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskLandscapeRight;
}

-(BOOL)shouldAutorotate {
    return NO;
}

これに対する解決策、またはiOS 8でビューコントローラを特定の方向にロックする良い方法はありますか?助けてください!

解決方法は?

iOS 7 - 10の場合。

Objective-Cです。

[[UIDevice currentDevice] setValue:@(UIInterfaceOrientationLandscapeLeft) forKey:@"orientation"];
[UINavigationController attemptRotationToDeviceOrientation];

Swift 3:

let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()

で呼び出すだけです。 - viewDidAppear: を使用します。