时间:2021-05-20
参考资料:
Apple 开发文档 Customizing the Transition Animations
WWDC 2013 Custom Transitions Using View Controllers
图例:
跳转的动画有很多,全部可以自定义
创建自定义跳转必须遵循的三个步骤:
1、创建一个类,并实现了 UIViewControllerAnimatedTransitioning 协议
2、创建一个类作为 UIViewControllerTransitioningDelegate 过渡代理
3、在模态跳转前修改控制器的 transitioningDelegate 代理为自定义的代理(步骤2的代理类)
核心代码示例
一、创建一个类,并实现了 UIViewControllerAnimatedTransitioning 协议
这个协议主要控制控制器视图的显示的,通过 transitionContext 可以获取到每个视图和控制器,并进行动画的设置
class AnimatedTransitioning: NSObject { var isPresenting: Bool = false}extension AnimatedTransitioning: UIViewControllerAnimatedTransitioning { func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { return 0.5 } func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { let fromView = transitionContext.view(forKey: .from)! let toView = transitionContext.view(forKey: .to)! let containerView = transitionContext.containerView if isPresenting { toView.transform = CGAffineTransform(scaleX: 0, y: 0) containerView.addSubview(toView) } else { containerView.insertSubview(toView, belowSubview: fromView) } UIView.animate(withDuration: 0.5, animations: { if self.isPresenting { toView.transform = CGAffineTransform.identity } else { fromView.transform = CGAffineTransform(scaleX: 0.001, y: 0.001) } }) { (finished) in transitionContext.completeTransition(finished) } }}二、创建一个类作为 UIViewControllerTransitioningDelegate 过渡代理
这里设置 presented 和 dismissed 时各自的动画转换类,可以设置为不同的类
class CustomTransitioningDelegate: NSObject, UIViewControllerTransitioningDelegate { func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { let at = AnimatedTransitioning() at.isPresenting = true return at } func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { let at = AnimatedTransitioning() at.isPresenting = false return at }}三、在模态跳转前修改控制器的 transitioningDelegate 代理为自定义的代理
注意:代理不能为局部变量
class ViewController: UIViewController { // 必须保存为实例变量 var ctDelegate = CustomTransitioningDelegate() override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { let vc = TempViewController() vc.transitioningDelegate = ctDelegate self.present(vc, animated: true, completion: nil) }}以上这篇iOS 控制器自定义动画跳转方法(模态跳转)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了thinkphp5框架调用其它控制器方法实现自定义跳转界面功能。分享给大家供大家参考,具体如下:Loader::action('common/su
本文实例讲述了AngularJS实现自定义指令与控制器数据交互的方法。分享给大家供大家参考,具体如下:AngularJS自定义指令与控制器数据交互angular
主要目标在Asp.netCore控制器中,通过自定义格式化程序来映射自定义处理控制器中的“未知”内容。本文将给大家详细介绍关于Asp.NetCore控制器接收原
本文实例讲述了AngularJS基于factory创建自定义服务的方法。分享给大家供大家参考,具体如下:为什么要创建自定义服务?很简单,不想让控制器显得过于“臃
一、系统提供的转场动画目前,系统给我们提供了push/pops和present/dismiss两种控制器之间跳转方.当然,通过设置UIModalTransiti