2015-04-04 73 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];