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
,然后添加一个,我想在淡入动画中显示这个。