加载视图时NAvigationbar跳转

时间:2012-06-04 08:15:56

标签: iphone ios uinavigationcontroller core-animation uinavigationbar

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

但是在实现任何涉及UINavigationController的动画时我遇到了一个问题,结果并不像预期的那样。例如,如果我在使用导航栏显示控制器时从左侧动画执行翻转,导航栏的位置将保持低于原始位置44pxs,并且在执行动画后导航栏将平滑移动到原始位置难看...

我执行的每个动画都会发生这种情况,所以我猜它必须只与navigationcontroller有关。

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

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

3 个答案:

答案 0 :(得分:0)

根据iphone或ipad设置导航栏的框架及其在iphone中的纵向方向

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

您需要将导航栏框架从状态栏更改为其实际位置,即加20

答案 1 :(得分:0)

我与NavigationControllerContainer 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];
                      }];

答案 2 :(得分:0)

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