如何自定义模态视图控制器呈现动画?
Posted
技术标签:
【中文标题】如何自定义模态视图控制器呈现动画?【英文标题】:How to custom Modal View Controller presenting animation? 【发布时间】:2013-11-12 14:22:48 【问题描述】:我不想设置 uiviewcontroller 的 modalTransitionStyle
,而是想添加一个 CAAnimation(或其他一些东西)。此代码可以在 navigationController 中执行自定义动画
CATransition* transition = [CATransition animation];
transition.duration = 0.4;
transition.type = kCATransitionFade;
transition.subtype = kCATransitionFromBottom;
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
[self.navigationController pushViewController:adjustViewController animated:NO];
如何将它实现到模态视图控制器?
【问题讨论】:
【参考方案1】:您只需将过渡添加到窗口层,并呈现您的控制器而不是推送它:
CATransition* transition = [CATransition animation];
transition.duration = 1;
transition.type = kCATransitionFade;
transition.subtype = kCATransitionFromBottom;
[self.view.window.layer addAnimation:transition forKey:kCATransition];
[self presentViewController:adjustViewController animated:NO completion:nil];
【讨论】:
这样做而不是设置一个实现 UIViewControllerAnimatedTransitioning 的委托有什么优点/缺点? 以上代码从ios2开始工作,UIViewControllerAnimatedTransitioning从iOS 7.0开始出现【参考方案2】:Swift 版本
let viewController = YourViewController()
let transition = CATransition()
transition.duration = 0.5
transition.type = kCATransitionFade
transition.subtype = kCATransitionFromBottom
view.window!.layer.add(transition, forKey: kCATransition)
present(viewController, animated: false, completion: nil)
【讨论】:
【参考方案3】:来自苹果开发指南:
Presenting a View Controller Using Custom Animations
要使用自定义动画呈现视图控制器,请在现有视图控制器的操作方法中执行以下操作:
创建您要呈现的视图控制器。
创建您的自定义过渡委托对象并将其分配给视图控制器的 transitioningDelegate 属性。转换委托的方法应在被询问时创建并返回您的自定义动画对象。
调用 presentViewController:animated:completion: 方法来呈现视图控制器。
...
【讨论】:
您还需要将视图控制器的modalPresentationStyle
设置为.custom
。此方法比在 iOS 7 (2013) 后使用CATransition
更正确以上是关于如何自定义模态视图控制器呈现动画?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 presentViewController 的情况下以模态方式呈现自定义视图?
使用自定义模式 UIViewControllerTransitioningDelegate 进行旋转