如何更改popToRootViewController的过渡样式?

时间:2014-10-20 16:01:57

标签: ios animation uinavigationcontroller

我有一个基于导航的应用程序,我在其中推送几个viewControllers(从右到左)以创建一个事件。当用户到达最后一个屏幕并创建事件时,我会调用...

[self.navigationController popToRootViewControllerAnimated:YES]; 

...返回第一个屏幕。这样可以,但是当过渡动画只是一个从左到右的简单时。

有没有办法将转换样式更改为popToRootViewController以外的其他内容?我希望它看起来与回到上一个屏幕不同。

3 个答案:

答案 0 :(得分:1)

希望它有所帮助!

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

CATransition *transition = [CATransition animation];
[transition setType:kCATransitionFade];
[self.navigationController.view.layer addAnimation:transition forKey:@"someAnimation"];

[self.navigationController popViewControllerAnimated:YES];
[CATransaction commit];

答案 1 :(得分:0)

假设我们正在谈论iOS 7+,您需要在导航控制器中实施UINavigationControllerDelegate协议。从那以后,使用 navigationController:animationControllerForOperation:fromViewController:toViewController:提供符合​​UIViewControllerAnimatedTransitioning条件的对象,该对象将执行您的自定义动画。您可以查看UINavigationControllerDelegate文档以获取更多信息。

答案 2 :(得分:0)

我猜测而不是调用popToRootViewController你可以做自己的方法(通过继承UINavigationController,或做一个类别或任何你想要的)

并执行类似的操作(代码将根据您实现它的位置而有所不同,但这是想法):

UIViewController *rootVC = self.navigationController.topViewController;
[UIView animateWithDuration:1 animations:^{
    // Have fun doing what you want with the rootview
    [self.view addSubview:rootVC.view];
} completion:^(BOOL finished) {
    [self.navigationController popToRootViewControllerAnimated:NO];
}];