如何更改 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 之后没有显示标签栏