2012-06-23 61 views
5

渲染導航欄在自定義SEGUE,我有以下簡單的過渡:爲UINavigationController的自定義動畫推不正確

- (void) perform { 
    UIViewController *src = (UIViewController *) self.sourceViewController; 
    UIViewController *dst = (UIViewController *) self.destinationViewController; 
    [UIView transitionWithView:src.navigationController.view duration:1 
         options:UIViewAnimationOptionTransitionFlipFromBottom 
        animations:^{ 
         [src.navigationController pushViewController:dst animated:NO]; 
        } 
        completion:NULL]; 
} 

內容視圖動畫的罰款。但是,執行動畫時,頂部的導航欄佈局錯亂(按鈕全部擠在左上角,沒有標題),只有在動畫完成時才彈出到位。任何人都知道我做錯了什麼以及如何解決它?謝謝!

回答

5

找出我的問題。原始代碼的確是不正確的,因爲UINavigationController是如何工作的並與它所管理的UIViewController交互。 (就像我在OP沒有煩人的東西,可以發現在舊的SO職位的解決方案。)

這裏的代碼爲我的作品(有一個小問題):

- (void) perform { 
    UIViewController *src = (UIViewController *) self.sourceViewController; 
    UIViewController *dst = (UIViewController *) self.destinationViewController; 
    [UIView transitionFromView:src.view 
         toView:dst.view 
         duration:1 
         options:UIViewAnimationOptionTransitionFlipFromBottom 
        completion:nil]; 
    [UIView transitionFromView:src.navigationItem.titleView 
         toView:dst.navigationItem.titleView 
         duration:1 
         options:UIViewAnimationOptionTransitionFlipFromBottom 
        completion:nil]; 
    [src.navigationController pushViewController:dst animated:NO]; 
} 

狡辯:這將與內容視圖分開製作導航欄的動畫,以便您有兩個部分翻轉而不是整個屏幕。我原本試圖做到:

[UIView transitionFromView:src.navigationController.view 
         toView:dst.navigationController.view 

但是失敗了,因爲直到它推到導航控制器1)目標的navigationController屬性甚至沒有設置呢,和2)即使它是我會指以相同的觀點!我忘了

的導航控制器的視圖僅僅是幾個 其他意見,包括一個導航欄,可選的工具欄,包含自定義內容 視圖的容器......雖然的內容 導航欄和工具欄視圖的改變,自己做 觀點不...導航控制器對象構建 導航欄的動態使用導航項目的內容與該視圖控制器上 相關聯(的 的UINavigationItem類實例)導航堆棧。要更改導航欄的內容, 因此您必須爲您的自定義視圖 控制器配置導航項目。 (docs)

+0

有人可以解釋爲什麼這是downvoted? – qix

+0

非常感謝!剪切代碼幫助我弄清楚,在推送過程中,如何僅對導航欄切換進行動畫製作,而不是內容視圖切換 – Denis

0

另一個「狡辯」? 我把

[src.navigationController pushViewController:dst animated:YES]; 

[UIView transitionFromView ... 

,使導航控制器爲目標的viewDidLoad方法內到達之前。

相關問題