2

iOS 6 の向きについて質問があります。私のファイルは こちら https://www.dropbox.com/s/f8q9tghdutge2nu/Orientations_iOS6.zip

MasterViewControllerこのサンプル コードでは、 は縦向きのみを持ち、 は縦向き、横向きを持ちたいと考えていDetailViewControllerます。

iOS 6 の向きが最上位のコントローラーによって制御されていることは知っています。

そのためUINavigationController(CustomNavigationController)、そのクラスで をカスタマイズし、supportedInterfaceOrientations と shouldAutorotate を設定します。

-(NSUInteger)supportedInterfaceOrientations{
    if([[self topViewController] isKindOfClass:[DetailViewController class]]){
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }else{
        return UIInterfaceOrientationMaskPortrait;
    }
}

-(BOOL)shouldAutorotate
{
    return YES;
}

横向きの場合を除いて、すべて問題ありません。DetailViewController戻るボタンを押すと、MasterViewController横向きが表示されます。

MasterViewController常に縦向きを表示させDetailViewControllerて、多くの向きを設定できますか?

ありがとう!

4

2 に答える 2

3

ありがとう!ブレナン、
私は自分のブログでそれを行う他の方法も集めています。
http://blog.hanpo.tw/2012/09/ios-60-orientation.html

これが他の2つの方法です。

1.カテゴリをUINavigationControllerに追加します

    @implementation UINavigationController (Rotation_IOS6)

    -(BOOL)shouldAutorotate
    {
        return [[self.viewControllers lastObject] shouldAutorotate];
    }

    -(NSUInteger)supportedInterfaceOrientations
    {
        return [[self.viewControllers lastObject] supportedInterfaceOrientations];
    }

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    {
        return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
    }

    @end

2.スワップメソッドの実装(spoletto製)

https://gist.github.com/3725118

于 2012-10-10T08:04:05.193 に答える
1

質問に対するコメントであなたが提案したように、私はこれを機能させました。問題は、デフォルトの UINavigatonController が最上位ビュー コントローラーの値を使用しないことです。そのため、基本クラスを作成し、それを Storyboard で基本クラスとして設定することでオーバーライドする必要があります。

以下は私が使用するコードです。

- (NSUInteger) supportedInterfaceOrientations {
    return [self.topViewController supportedInterfaceOrientations];
}

また、縦向きを使用するように動作をデフォルトにするための、残りのビュー コントローラーの基本クラスもあります。iOS 5 および 6 のこれらのメソッドは、Portrait 方向以上をサポートする任意のビュー コントローラーでオーバーライドできます。

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

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

- (BOOL)shouldAutorotate {
    return FALSE;
}
于 2012-10-08T01:45:12.977 に答える