2012-02-29 110 views
0

我已經爲iPad創建了自己的分割視圖控制器。我創建自己的主要目的是允許用戶隨意打開/關閉左側疼痛。我遇到的問題是我無法找到一種方法來讓視圖控制器在我的右邊疼痛中動畫化變化。我在分割視圖控制器中爲視圖設置動畫,但右窗格中的所有其他子視圖控制器不會爲其視圖設置動畫。我沒有切換視圖,所以我不能使用這些方法中的任何一種,也不會改變方向,所以這些方法都沒有了(儘管我嘗試了它們,但它沒有奏效)。有誰知道一種方法來做到這一點?UIViewController容器子控制器動畫

目前,我的代碼來啓動動畫是:

- (void) setShowLeftPane:(BOOL)showLeftPane{ 
    if (_showLeftPane != showLeftPane){ 
     _showLeftPane = showLeftPane; 

     //Alert viewcontrollers and perform animation 
     if (showLeftPane) [_leftController viewWillAppear:YES]; 
     else [_leftController viewWillDisappear:YES]; 
     [UIView animateWithDuration:.25 animations:^{ 
      [self layoutViews]; 
      [_rightController viewWillLayoutSubviews]; 
     } completion:^(BOOL fin){ 
      [_rightController viewDidLayoutSubviews]; 
      if (_showLeftPane) [_leftController viewDidAppear:YES]; 
      else [_leftController viewDidDisappear:YES]; 
     }]; 

     //Switch out the appropriate pane button view 
     [_showLeftPane ? _openLeftPane : _closeLeftPane removeFromSuperview]; 
     [self.view addSubview:_showLeftPane ? _closeLeftPane : _openLeftPane]; 
    } 
} 

目前我的右窗格視圖控制器是一個UINavigationController,所以我負責的一個股票類。我曾考慮給UINavigationController添加一個類別方法viewWillAnimateSubviewLayoutWithDuration:(NSTimeInterval)interval,該方法將循環它的視圖控制器測試/發送相同的方法到它的視圖控制器,以便它們可以執行它們的動畫,但這並不是很理想,尤其是如果有一種方法可以使用stock方法。

我正在考慮編寫自己的NavigationController,但如果我不必這樣做,我不想做很多工作。

回答

0

對於那些關心,我最終編寫了我自己的導航容器控制器。這是很多工作,但最終因爲幾個原因而變得理想。首先,創建自定義容器控制器給了我更多關於視圖控制器如何工作的深入理解,這對我有幫助。其次,它讓我對「導航控制器」的工作原理有了更多的控制,使我能夠輕鬆實現自定義過渡和自定義彈出/推送方法,包括我的急需的'替換'(彈出,然後推送)方法應用。