2015-04-04 92 views
0

當我用此方法更改UIViewController時,它僅顯示沒有任何動畫。我想在視圖中添加淡入淡出動畫,我怎麼能這樣做?在動畫中添加淡入淡出到UIViewController外觀

- (void)changeToRootViewController:(UIViewController*)viewController forNavigationController:(UINavigationController*)naviController class:(Class)class 
{ 
    if ([[naviController.viewControllers lastObject] isKindOfClass:[class class]]) 
    { 
     NSLog(@"Already inside %@.", NSStringFromClass(class)); 
     return; 
    } 

    [naviController popToRootViewControllerAnimated:NO]; 
    NSMutableArray *viewControllers = [[NSMutableArray alloc] initWithArray:naviController.viewControllers]; 
    [viewControllers removeObjectAtIndex:0]; 
    naviController.viewControllers = viewControllers; 
    [naviController pushViewController:viewController animated:YES]; 
} 
+0

什麼是你真正想用你的視圖控制器陣列的突變呢? – Wain 2015-04-04 12:13:42

+0

刪除第一個視圖控制器並添加新視圖控制器。 – 2015-04-04 12:14:32

+0

您正在彈出並同時推動視圖控制器。這將導致動畫不平衡。 – Jassi 2015-04-04 12:16:58

回答

1

你應該做一個改變導航控制器,而不是兩個:

[naviController setViewControllers:@[ viewController ] animated:YES]; 

將與你的一個控制器更換控制器的現有堆棧,使用適當的動畫。

假設你班檢查,真正需要的相同的實例,而不僅僅是同一類視圖控制器,那麼你實際上可以用一個線取代所有此方法。

如果您想在堆棧中留下一些視圖控制器,請創建viewControllers的可變副本,編輯其內容,然後使用動畫將該陣列設置爲視圖viewController數組。

6

你可以嘗試這樣的事情:

CATransition* transition = [CATransition animation]; 
transition.duration = 0.3; 
transition.type = kCATransitionFade; 
transition.subtype = kCATransitionFromTop; 

[self.navigationController.view.layer addAnimation:transition forKey:kCATransition]; 
[self.navigationController pushViewController:yourViewController animated:NO];