我有一个基于导航的应用程序,我在其中推送几个viewControllers(从右到左)以创建一个事件。当用户到达最后一个屏幕并创建事件时,我会调用...
[self.navigationController popToRootViewControllerAnimated:YES];
...返回第一个屏幕。这样可以,但是当过渡动画只是一个从左到右的简单时。
有没有办法将转换样式更改为popToRootViewController以外的其他内容?我希望它看起来与回到上一个屏幕不同。
答案 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];
}];