Ios 向UIViewController外观添加淡入动画

Ios 向UIViewController外观添加淡入动画,ios,objective-c,animation,uiviewcontroller,Ios,Objective C,Animation,Uiviewcontroller,使用此方法更改UIViewController时,它只是在没有任何动画的情况下出现。我想在视图中添加淡入动画,如何才能做到这一点 - (void)changeToRootViewController:(UIViewController*)viewController forNavigationController:(UINavigationController*)naviController class:(Class)class { if ([[naviController.viewCo

使用此方法更改
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];
}

您应该对导航控制器进行一次更改,而不是两次:

[naviController setViewControllers:@[ viewController ] animated:YES];
这将使用适当的动画将现有的控制器堆栈替换为一个控制器

假设您的类检查实际上是在寻找同一个实例,而不仅仅是同一个视图控制器类,那么您实际上可以用这一行替换所有该方法


如果要在堆栈中保留一些视图控制器,请创建
viewControllers
的可变副本,编辑其内容,然后将该数组设置为带有动画的视图
viewController
数组。

您可以尝试以下操作:

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

您实际上在尝试如何处理视图控制器阵列的变体?删除第一个视图控制器并添加新的视图控制器。同时弹出并推送视图控制器。这将导致不平衡的动画。是的,但是第一个没有动画,第二个有动画。你建议我做什么?我有一个带有
UIViewControllers
数组的
uiviewcontroller
,我想删除所有
UIViewControllers
,然后添加一个,我想在淡入动画中显示这个。