2

我已经实现了一个容器视图控制器(ios5),现在我尝试实现自定义动画/转换来切换视图控制器。

但是在实现任何涉及 UINavigationController 的动画时,我遇到了一个问题,结果不符合预期。例如,如果我在显示带有导航栏的控制器时执行从左侧翻转的动画,导航栏的位置会保持在原始位置下方 44pxs 并且在执行动画后导航栏将平滑地移动到原始位置,这确实是丑陋的...

我执行的每个动画都会发生这种情况,所以我想它必须只与导航控制器相关。

这是我用于翻转过渡的代码

[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

我有类似的问题NavigationControllerand 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

根据 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 回答
0

在 viewDidLoad 中将 frame.origin.y 设置为 1。您仍然有跳跃但有 1 个像素。

于 2013-05-16T14:02:58.030 回答