0

私は現在、デバイスの向きによってビューの構造が完全に異なるiPad用のアプリを作成しています。

アプリが縦向きの場合、ECSlidingViewControllerライブラリを使用して、左右のスライドメニュー(Facebookやパスなど)をサポートしています。

アプリが横向きの場合、左側のメニューが常に表示されるように、splitviewcontrollerを表示する必要があります。

この問題の最善の解決策を知っている人はいますか?

向きの変更が検出されたときにUIWindowのRootViewControllerを変更しようとしましたが、これにより非常に奇妙な結果が得られました。

4

1 に答える 1

1

これを行うにはいくつかの方法があります。他のものよりも優れているものもありますが、ほとんどの場合、特定の状況のニーズによって異なります。

  1. rootViewControllerローテーション中に述べたように交換してください。
  2. ポートレートとランドスケープの間で回転するときは、常にaUISplitViewControllerを使用し、seguetoを使用してreplaceを置き換えます。detailViewController
  3. addChildViewController:およびを使用して回転時に適切なViewControllerを追加/削除するカスタムコンテナViewControllerを使用/作成します。removeFromParentViewController:

選択肢3の非常に大雑把な例。

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self.childViewControllers[0].view removeFromSuperView];
    [self.childViewControllers[0] removeFromParentViewController];

    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
        [self addChildViewController:portraitVC];
        [self.view addSubview:portraitVC.view];
    } else {
        [self addChildViewController:landscapeVC];
        [self.view addSubview:landscapeVC.view];
    }
}

あなたが言ったことから、私はオプション3が最適だと思います。とはいえ、View Controllerを切り替える必要があると完全に確信しているわけではありませんが、View ControllerがECSlidingViewController何を提供するのかよくわからないため、確信が持てません。

于 2013-02-19T15:41:38.193 に答える