popViewControllerAnimated:自定义过渡动画?

时间:2012-05-11 14:24:55

标签: xcode animation uinavigationcontroller transition

是的,我已经找到了答案。这些解决方案都不起作用,除了没有提供淡入淡出过渡选项的解决方案,只有翻转或卷曲。

像这样:

methodname
    configure animation
    [self.navigationController popViewControllerAnimated:NO];

无论我尝试什么样的过渡动画配置,没有什么明显不同于仅使用典型的单行流行音乐。如果我将其更改为…Animated:YES];,我会得到标准的流行动画,可能是因为破坏的配置中发生了一些奇怪的事情。

所以我的问题是:如果不是pop,我怎么能用CrossDissolve,然后至少看起来相同?导航控制器甚至可以实现这一点吗?

使用模态视图将拥有我想要的默认动画,并且我可以轻松地管理视图堆栈,但我不想这样做。

3 个答案:

答案 0 :(得分:23)

对于这种类型的过渡,我真的建议使用模态视图控制器,这就是系统的设计方式。

但是如果你坚持使用导航控制器有一种方法,虽然有点难看。

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

CATransaction将禁用所有标准动画。 CATransition在交换视图时向导航控制器层添加淡入淡出过渡(在这种情况下,删除弹出的视图控制器视图)。

答案 1 :(得分:2)

在上面的iOS 7中,您可能希望查看UIViewControllerAnimatedTransitioning呈现的视图控制器或UINavigationControllerDelegate方法:

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC

我有一些sample code from another question了解更多信息。

答案 2 :(得分:0)

Joris Kluivers在Swift 3中的回答:

CATransaction.begin()
CATransaction.setDisableActions(true)

let animation = CATransition()
animation.type = kCATransitionFade
self.navigationController?.view.layer.add(animation, forKey: "someAnimation")
_ = self.navigationController?.popViewController(animated: false)

CATransaction.commit()