popViewController Animated:自定义过渡动画?

Posted

技术标签:

【中文标题】popViewController Animated:自定义过渡动画?【英文标题】:popViewControllerAnimated: custom transition animation? 【发布时间】:2012-05-11 14:24:55 【问题描述】:

是的,我已经在寻找答案了。除了没有提供淡入淡出转换选项,只有翻转或卷曲的解决方案之外,其他解决方案均无效。

像这样:

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

无论我尝试了何种过渡动画配置,都与仅使用典型的单行弹出没有明显不同。如果我将其更改为 …Animated:YES];,我会得到标准的弹出动画,可能是由于损坏的配置发生了一些奇怪的事情。

所以我的问题是:如果不是CrossDissolve,我怎么能做一个pop,那么至少看起来是一样的?导航控制器是否也能做到这一点?

使用模态视图会有我想要的默认动画,我可以很容易地管理视图堆栈,但我不想这样做。

【问题讨论】:

【参考方案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];

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

【讨论】:

ios 7 中,我发现我需要将 NO 传递给 popViewControllerAnimated 而不是 YES,但否则效果很好。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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()

【讨论】:

以上是关于popViewController Animated:自定义过渡动画?的主要内容,如果未能解决你的问题,请参考以下文章

popViewController 和 pushViewController 动画

Swift - 解雇后的popViewController

popViewController(animated: true) 动画运行缓慢

为啥 ARC 在 popViewController 之后不释放内存

NSURLSessionDataTask 中的 popViewController 动画工作缓慢

dismissModalViewController 然后是 popViewController