6

iOS 6 のローテーションをサポートしたい。問題は、私は多くのドキュメントとスタック オーバーフローの質問を調べてきましたが、少しでも詳細な解決策が見つからないことです。これら 2 つのメソッドをビュー コントローラー クラスに追加する必要があることだけを確認しましたが、間違っていなければ、iOS 6 以前のメソッドと同じように動作しません。

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll; // use what is appropriate for you.
}

私のアプリは現在、次のコードを使用して iOS6 より前にローテーションします。ビュー コントローラーをプッシュするかどうかを決定するために、インターフェイスの向きのパラメーターを使用していることに注意してください。iOS 6 ローテーション デリゲートでこれを実装するにはどうすればよいですか?

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    UIInterfaceOrientation toOrientation = self.interfaceOrientation;

    if ( self.tabBarController.view.subviews.count >= 2 )
    {
        UIView *tabBar = [self.tabBarController.view.subviews objectAtIndex:1];

        if(toOrientation != UIInterfaceOrientationLandscapeLeft && toOrientation != UIInterfaceOrientationLandscapeRight)
        {
            CUSTOM_DEBUG_LOG("\n\nRotated back to Portrait");
            tabBar.hidden = FALSE;
        }
    }
}

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
    if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
    {
        CUSTOM_DEBUG_LOG("\nView going landscape");
        ScrollViewController *s = [[ScrollViewController alloc] initWithNibName:@"ScrollViewController" bundle:nil];
        [self.navigationController pushViewController:s animated:NO];
        [s release];
        self.tabBarController.tabBar.hidden = YES;
        self.navigationController.navigationBar.hidden = YES;
    }

}
4

4 に答える 4

3

親ビューは、iOS 6 で回転を処理するようになりました。nav コントローラーをサブクラス化し、bool を追加します。

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;  // your rotation here
}
于 2012-10-04T18:56:46.237 に答える
3

thisthis SO の議論をチェックしてください。

[編集]

はい、あなたが言及した方法は iOS 6.0 では廃止されておらず、引き続き機能します。Auto Rotation の動作が変更されただけです。これまでは、ビュー コントローラーが回転するかどうかを決定する責任がありましたが、現在は RootViewController が子を回転させるかどうかを決定します。rootviewcontroller のセットアップがない場合は、それをウィンドウに追加してから、rootviewcontroller に shouldAutoRotate メソッドと supportedInterfaceOrientations メソッドを配置する必要があります。

于 2012-10-04T19:54:29.233 に答える
1

UINavigationController を使用している場合は、shouldAutomaticallyForwardRotationMethods = YESプロパティをオーバーライドします。

次に、Mark Sが言ったように、子VCもオーバーライドshouldAutorotateします。supportedInterfaceOrientations

于 2013-03-26T20:59:04.860 に答える
1

最初に質問を投稿したときに、iOS6 ローテーション コードを正しく実装していなかった可能性があります。

willAnimateRotationToInterfaceOrientation 関数は iOS6 で非推奨になったと誤って考えたため、方向パラメーターを持つ新しい iOS 回転デリゲートが存在すると思い込んでしまいました。これは事実ではないことが判明したため、私のアプリは動作します。

アプリにプラグインしたコードは次のとおりです。

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight);
}
于 2012-10-04T21:26:58.877 に答える