iOS自定义转场动画

     能让App高端的不仅仅是动画,但是能让App感觉高端的那绝对是动画。 公司项目是语音这块的,看了几个竞品,感觉我们的转场真是钢铁般的硬啊!大致研究了一下转场动画(Push 和 Present),运用到项目中,可以让App感觉些许高端点。

**Push转场动画:**做push转场动画的时候需要设置控制器的 navigationController设置一个代理,然后在实现如下方法:

 func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {        
    let transition = TransitionPushAniManager.init(duration: 0.5, pushType: (operation == .push) ? .push : .pop)
    return transition
 }
复制代码

TransitionPushAniManager是一个遵循了UIViewControllerAnimatedTransitioning协议的类的实例。在TransitionPushAniManager里实现协议对应的如下两个方法:

///返回动画时长 
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
     return duration
 }
  
 ///要执行的动画  
 func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
    if pushType == .push {
         pushAnimateTransition(using: transitionContext)
            
     } else {
         popAnimateTransition(using: transitionContext)
     }
 }
复制代码

然后在pushAnimateTransition(using: transitionContext) 和 popAnimateTransition(using: transitionContext)做动画实现!

**Model转场动画:**做模态转场动画的时候需要设置所要去的页面控制器的 transitioningDelegate设置一个代理,然后在实现如下方法:

 ///去的方法 - present
 func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
     return TransitionModalAniManager.init(duration: 0.5, modalType: .present)
 }
    
 ///回来的方法 - dismiss
 func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
     return TransitionModalAniManager.init(duration: 0.5, modalType: .dismiss)
 }
复制代码

TransitionModalAniManager是一个遵循了UIViewControllerAnimatedTransitioning协议的类的实例。在TransitionModalAniManager里实现协议和push相同的如下两个方法:

///返回动画时长 
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
     return duration
 }
  
 ///要执行的动画  
 func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
    if modelType == .present {
         presentAnimateTransition(using: transitionContext)
            
     } else {
         dismissAnimateTransition(using: transitionContext)
     }
 }
复制代码

然后在presentAnimateTransition(using: transitionContext)和dismissAnimateTransition(using: transitionContext)做动画!

大致的代码可以扫一下:转场动画

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享