2014-02-26 94 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]; 
相關問題