如何更改popToRootViewController的转换样式?
我有一个基于导航的应用程序,我推几个viewControllers(一般从右到左)创建一个事件。当用户到达最后一个屏幕并创建事件时,我会调用...如何更改popToRootViewController的转换样式?
[self.navigationController popToRootViewControllerAnimated:YES];
...返回到第一个屏幕。这工作正常,但过渡动画只是一个简单的从左到右。
是否有一种方法可以将过渡样式更改为仅从popToRootViewController左至右的其他方式?我希望它看起来不同于回到上一个屏幕。
希望它有帮助!
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
CATransition *transition = [CATransition animation];
[self.navigationController.view.layer addAnimation:transition forKey:@"someAnimation"];
[self.navigationController popViewControllerAnimated:YES];
[CATransaction commit];
假设我们正在谈论的iOS 7+,你将需要实现您的导航控制器中的协议。从那里开始,使用 navigationController:animationControllerForOperation:fromViewController:toViewController:
提供一个UIViewControllerAnimatedTransitioning
符合对象,该对象将执行您的自定义动画。您可以查看UINavigationControllerDelegate文档了解更多信息。
我猜的,而不是调用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];
}];