0

私は今Ipad用のアプリをテストしています。基本的に、マスターディテールアプリケーションにテンプレートを使用していて、別のportraitViewControllerがあります。ここで、アプリケーションがポートレートモードで起動するときは、portraitViewControllerのみを表示し、デバイスを回転させるとき、たとえばランドスケープモードでは、master-detailViewControllerのみを表示します。これを行うための最良の方法は何ですか。

シングルビューアプリケーションのサンプルコードをテストしていましたが、マスター/詳細ビューが非表示になりませんでした。

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)
interfaceOrientation duration:(NSTimeInterval)duration {
    if (interfaceOrientation == UIInterfaceOrientationPortrait) {
        self.view = self.portrait;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform =
        CGAffineTransformMakeRotation(degreesToRadians(0));
        self.view.bounds = CGRectMake(0.0, 0.0, 320.0, 460.0);
    }
    else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
        self.view = self.landscape;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform =
        CGAffineTransformMakeRotation(degreesToRadians(−90));
        self.view.bounds = CGRectMake(0.0, 0.0, 480.0, 300.0);
    }
    else if (interfaceOrientation ==
             UIInterfaceOrientationLandscapeRight) {
        self.view = self.landscape;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform =
        CGAffineTransformMakeRotation(degreesToRadians(90));
        self.view.bounds = CGRectMake(0.0, 0.0, 480.0, 300.0);
} } 
4

1 に答える 1

1

ビューコントローラは、このようにリアルタイムでビューを変更してはなりません。ビューコントローラの古いビューがまだインターフェイスに残っているため、何も起きていません。インターフェイスから削除するのではありません。また、そうすべきではありません。これを実現する方法は、ViewControllerを交換することです。別のビューコントローラと別のビューを使用してください。

マスター/詳細ビューコントローラーから始めたので、アプリのルートビューコントローラーはUISplitViewControllerです。ビュー(分割ビュー)が表示され、削除するビューです。したがって、UISplitViewControllerをウィンドウのとして置き換える必要がありますrootViewController

しかし、それはお尻の大きな痛みです。縦向きの場合は、すべての前にモーダル(表示)ビューコントローラーを配置する方が幸せかもしれません。

これは、デバイスの回転に応じてViewControllerを表示するダウンロード可能なサンプルプロジェクトです。

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p609rotationForcingModalView

于 2013-03-27T00:48:16.217 に答える