0

我目前正在爲iPad構建一個應用程序,其中視圖結構根據設備方向而完全不同。當設備方向改變時切換到不同的UIViewController

當應用程序處於縱向狀態時,我使用ECSlidingViewController庫來支持左右滑動菜單(如Facebook或路徑)。

當應用程序處於橫向模式時,我需要顯示一個splitviewcontroller,以便左側菜單始終可見。

有沒有人知道這個問題的最佳解決方案?

我試圖檢測到的方向變化,但是這給了一些非常奇怪的結果,當改變一個UIWindow的RootViewController的....

回答

1

有幾種方法可以做到這一點。有些比其他更好,但主要取決於具體情況的需要。

  1. 替換您在循環過程中提到的rootViewController
  2. 始終使用UISplitViewController並使用seguereplace替換縱向和橫向之間旋轉時的detailViewController
  3. 使用/做增加了一個自定義的容器視圖控制器/使用addChildViewController: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將是最合適的。儘管如此,我並不完全相信你需要切換視圖控制器,但我不熟悉ECSlidingViewController,它提供了什麼,所以我不能確定。

+0

感謝您的回覆。我想在檢測到旋轉時重置rootViewController。你知道我能做到嗎?當我嘗試它時,它似乎做了一些奇怪的分層和旋轉.... – 2013-02-19 16:14:58

+0

問題是,我的ECSlidingViewController實現的主視圖控制器需要擴展一個特定的子類,這將在使用UISplitViewController時發生衝突。 – 2013-02-19 16:19:55

+0

我最終將我的實現更改爲上面提出的解決方案3,這解決了問題。 – 2013-02-19 17:01:28

相關問題