参考资料: Apple 开发文档 Customizing the Transition Animations WWDC 2013 Custom Transitions Using View Controllers 图例: 跳转的动画有很多,全部可以自定义 创建自定义跳转必须遵循的三个步骤: 1、创建
          参考资料:
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 控制器自定义动画跳转方法(模态跳转)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持自由互联。
