2012-06-23 6 views
5

カスタムセグエでナビゲーションバーをレンダリングしないプッシュ、私は次の簡単な移行があります。カスタムアニメーションが正しく

- (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記事中の溶液として見つけることができます。)

ここでは(1つのマイナーな屁理屈で)私のために動作するコードです:

- (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]; 
} 

屁理屈:この意志はコンテンツビューとは別にNavbarをアニメーション化するので、画面全体ではなく2つの部分が反転します。私はもともとやってみました:

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

をしかし、それはそれはナビゲーションコントローラにプッシュされるまで1)先のnavigationControllerプロパティもまだ設定されていないため失敗し、2)それは私が言及されたいた場合でも、同じビューに!私は

ナビゲーションコントローラのビューが...、ナビゲーションバー、オプションのツールバー、およびカスタムコンテンツを含む ビューを含むいくつかの 他のビュー、のためだけのコンテナであることを忘れてしまったの内容が、 ナビゲーションバーとツールバービューが変更された場合、ビュー自体は ではありません。ナビゲーションコントローラオブジェクトは、 のビューコントローラに関連付けられたナビゲーション項目( のインスタンス、UINavigationItemクラスのインスタンス)を使用して ナビゲーションバーのコンテンツを動的に構築します。ナビゲーションスタック。ナビゲーションバーの内容を変更するには、 を使用するため、カスタム表示のナビゲーション項目を設定する必要があります。 コントローラ。 (docs)

+0

誰かがこれがなぜ落とされたのか説明できますか? – qix

+0

ありがとう!あなたのコードをスニップすると、プッシュ中にナビゲーションバーの切り替えだけをアニメートできますが、コンテンツビューの切り替えはできません – Denis

0

もう1つの "不安"? ナビゲーションコントローラは、先のviewDidLoadメソッド内で到達可能であるように、私は

[UIView transitionFromView ... 

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

を置きます。

関連する問題