如何更改 popToRootViewController 的过渡样式?

Posted

技术标签:

【中文标题】如何更改 popToRootViewController 的过渡样式?【英文标题】:How to change transition style for popToRootViewController? 【发布时间】:2014-10-20 16:01:57 【问题描述】:

我有一个基于导航的应用程序,我在其中推送多个视图控制器(正常从右到左)来创建事件。当用户到达最后一个屏幕并创建事件时,我调用...

[self.navigationController popToRootViewControllerAnimated:YES]; 

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

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

【问题讨论】:

【参考方案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];

【讨论】:

【参考方案2】:

假设我们讨论的是 ios 7+,您需要在导航控制器中实现 UINavigationControllerDelegate 协议。从那里开始,使用 navigationController:animationControllerForOperation:fromViewController:toViewController: 提供一个符合 UIViewControllerAnimatedTransitioning 的对象,该对象将执行您的自定义动画。您可以查看UINavigationControllerDelegate 文档了解更多信息。

【讨论】:

【参考方案3】:

我猜你可以做你自己的方法而不是调用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];
];

【讨论】:

以上是关于如何更改 popToRootViewController 的过渡样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何popToRootViewController在navigationController堆栈上有多个viewController,并且只显示一个过渡?

需要用 popToRootViewController 发布中间视图吗?

双击UITabBarController时防止自动popToRootViewController

在 popToRootViewController 之后没有显示标签栏

popToRootViewController 未按预期工作

从另一个选项卡调用 popToRootViewController