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 动画
popViewController(animated: true) 动画运行缓慢
为啥 ARC 在 popViewController 之后不释放内存