2014-10-20 55 views
1

我有一个基于导航的应用程序,我推几个viewControllers(一般从右到左)创建一个事件。当用户到达最后一个屏幕并创建事件时,我会调用...如何更改popToRootViewController的转换样式?

[self.navigationController popToRootViewControllerAnimated:YES]; 

...返回到第一个屏幕。这工作正常,但过渡动画只是一个简单的从左到右。

是否有一种方法可以将过渡样式更改为仅从popToRootViewController左至右的其他方式?我希望它看起来不同于回到上一个屏幕。

回答

1

希望它有帮助!

[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];

0

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

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]; 
}];