2014-02-26 50 views
2

我试图在我的UINavigationController的根视图控制器上推UIViewController。我正在做一个自定义转换,使它看起来像一个模态演示。推送另一个视图控制器时,根视图控制器的视图消失

CATransition* trans = [CATransition animation]; 
trans.type = kCATransitionMoveIn; 
trans.subtype = kCATransitionFromTop; 
trans.duration = 0.4f; 
trans.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
[self.navigationController.view.layer addAnimation:trans forKey:nil]; 
[self.navigationController pushViewController:vc animated:NO]; 

我的问题是,该self视图控制器的观点似乎当我推到消失,因此而转变运行模式,呈现后面的背景变成了黑色。

此图片说明了这个问题: enter image description here

当transtition完成品红视图预期是可见的,但在发生转变的绿色背景会消失。

回答

2

由于您使用的是iOS 7,您应该使用新的自定义过渡协议来处理这个动画而不是自己的层。问题是导航控制器会在您调用push时立即更新视图模型,因为您告诉它不要设置动画效果,从屏幕中删除以前的视图 - 可能还有视图层次结构在一起。

+0

这是正确的。 UINavigationController以这种方式工作,当您在不使用动画的情况下推新视图控制器时,它立即显示新视图并隐藏先前视图。 有两种正确的方法来完成它: 1)使用新的自定义转换协议, 2)创建自己的容器视图控制器,而不是使用uinavigationcontroller。这个新容器将负责更改和动画子视图控制器。 – pjanecze

0

试试这个,

CATransition *animation = [CATransition animation]; 
     [animation setDuration:0.40]; 
     [animation setType:kCATransitionReveal]; 

     [animation setSubtype:kCATransitionFromBottom]; 

     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 

     [navController.view.layer addAnimation:animation forKey:nil]; 
     [navController pushViewController:viewController animated:NO]; 
相关问题