2

コンテナビューコントローラー(ios5)を実装しましたが、ビューコントローラーを切り替えるためのカスタムアニメーション/トランジションを実装しようとしています。

しかし、UINavigationControllerを含むアニメーションを実装するときに問題が発生し、期待どおりの結果が得られません。たとえば、ナビゲーションバーでコントローラーを表示しているときに左からフリップアニメーションを実行すると、ナビゲーションバーの位置は元の位置より44ピクセル下に留まり、アニメーションが実行された後、ナビゲーションバーは元の位置にスムーズに移動します。ぶさいくな...

これは私が実行するすべてのアニメーションで発生するので、ナビゲーションコントローラーにのみ関連している必要があると思います。

これは私がフリップトランジションに使用するコードです

[self transitionFromViewController:fromViewController
                toViewController:toViewController
                        duration:1.0
                         options:UIViewAnimationOptionTransitionNone
                      animations:^{
                        [UIView beginAnimations:@"animation2" context:nil];
                        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
                        [UIView setAnimationDuration: 0.7];
                        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:containerView cache:NO]; 
                        [UIView commitAnimations];
                      }
                      completion:^(BOOL finished) {
                        [toViewController didMoveToParentViewController:self];
                        [fromViewController removeFromParentViewController];
                      }];

私も次のことを試しました

[self transitionFromViewController:fromViewController
                toViewController:toViewController
                        duration:1.0
                         options:UIViewAnimationOptionTransitionFlipFromLeft
                      animations:^{
                      }
                      completion:^(BOOL finished) {
                        [toViewController didMoveToParentViewController:self];
                        [fromViewController removeFromParentViewController];
                      }];
4

3 に答える 3

0

と で同様の問題がNavigationControllerありContainer controllerます。実際には、ウィンドウの下部にあるツールバーでした。私の解決策は、最初にツールバーを非表示にしてから、メインの遷移が完了した後にツールバーをアニメーションで表示することです。アニメーション全体の一部のように見えます。

ツールバーを非表示および表示する方法は次のとおりです。

[toNavController setToolbarHidden:YES];
[self transitionFromViewController:fromViewController
                toViewController:toNavController
                        duration:1.0
                         options:UIViewAnimationOptionTransitionFlipFromLeft
                      animations:^{
                      }
                      completion:^(BOOL finished) {
                        [toNavController didMoveToParentViewController:self];
                        [fromViewController removeFromParentViewController];

                        [toNavController setToolbarHidden:NO animated:YES];
                      }];
于 2012-11-08T11:46:21.760 に答える
0

viewDidLoad で frame.origin.y を 1 に設定します。ジャンプはまだありますが、1 ピクセルです。

于 2013-05-16T14:02:58.030 に答える
0

iphoneまたはipadのナビゲーションバーのフレームとその向きに合わせて、iphoneの縦向きにこのように設定します

 [self.navigationController.navigationBar setFrame:CGRectMake(0, 20, 320, 44)]; //for iphone  simarly for ipad and its orientation

ナビゲーション バー フレームをステータス バーからの実際の位置、つまりプラス 20 に変更する必要があります。

于 2012-06-04T08:45:37.270 に答える