11

iOS 5では、アプリケーションでメソッドを使用して向きを変更しました。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

iOS 6では、これを行うことになっていると思いますが、何もしません! アプリが希望どおりに回転しません。

- (BOOL) shouldAutorotate
{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeRight;
}
4

6 に答える 6

28

それは私が私の追加していた方法viewControllerです。

この行コードを置き換えました:

[window addSubview:viewController.view];

この行で:

[window setRootViewController:viewController];
于 2012-09-21T20:27:39.790 に答える
15

デバイスの向きが変わると、iOS 6 では、システムはアプリケーションにサポートする向きを尋ねます。アプリケーションは、受け入れた向きの数を返します。

アプリケーションはどのように方向を決定しますか?

  1. 最初に、アプリケーションは info.plist の方向をチェックします (これは、起動に使用する方向を決定するために非常に重要です。
  2. 次に、アプリケーション デリゲートに方向を尋ねます。これは、-(NSUInteger)application:supportedInterfaceOrientationsForWindow:メソッドを介して指定できます。これは実質的に info.plist 設定をオーバーライドします。この実装はオプションです。デフォルトでは、iPad アプリはすべての方向に向き、iPhone はすべて逆さまに向きます。
  3. 最後に、アプリケーション デリゲートは最上位のビュー コントローラーをクエリしUINavigationControllerますUIViewController。これらUIViewControllersはメソッドを使用shouldAutorotate:supportedInterfaceOrientationsて、アプリのデリゲートに表示方法を伝えることができます。

ウィンドウのルート ビュー コントローラーを設定していることを確認する必要があります。

また、モーダル ビュー コントローラーなどの他のビュー コントローラーを全画面表示している場合、これが向きの変更を決定する役割を果たします。

于 2012-09-27T14:38:15.133 に答える
2

私にとっては解決策がうまくいきましたUINavigationController. 私の場合は、1 つを除いてすべてのポートレート ウィンドウが必要でした。ターゲットですべての横向きと縦向きを有効にする必要がありました (そうしないと、唯一の横向きビューでクラッシュします)。

したがって、この場合:

  1. のサブクラスを作成しUINavigationController
  2. そこに回転固有のものを挿入します
  3. の代わりにサブクラスを使用しUINavigationControllerます。
于 2012-09-27T14:24:21.120 に答える
1

UINavigationController を使用している場合supportedInterfaceOrientations:、最上位のビュー コントローラーではなく、UINavigationController 自体にメッセージを送信します (つまり、実際に実行してもらいたいこと)。

UINavigationController をサブクラス化して修正する代わりに、 UINavigationController にカテゴリを追加するだけです。

于 2013-07-28T19:11:21.003 に答える
0

singleton: に新しい変数を作成しcanRotate、viewcontroller に向きをサポートさせたい場合は、それを YES に設定しました。

appDelegate でこれを追加しました:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    if([[SharedData sharedInstance] canRotate])
    {
        return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight);
    }
    return UIInterfaceOrientationMaskPortrait;
}

私の場合は動作します。カスタム タブバーがあり、UINavigationviewControllers がサブビューとして rootViewController に追加されます。

于 2012-09-28T09:44:49.440 に答える
0

これはかなり初歩的なことのように聞こえますが、iPhone でのテスト中に向きの問題を把握するために頭を悩ませていました - ポートレート モードで物理的な自動ロック モードを使用していたので、プログラムで変更したものは何も重要ではありませんでした - これはトラブルシューティングのステップ 1 であると考えました!

于 2013-04-30T16:43:11.090 に答える