iOS添加自定义转场动画和交互动画(二)

了解了转场动画的流程后,我就想封装下,然后可以一句代码搞定转场动画。因为这个在需求上就是一句话,比如A要push到B了,那么想这个转场就用B逐渐方法然后把A遮盖的效果。我不要再去实现什么navigationController的委托方法、还要又去实现一边动画效果。

研究了下,基本达到了需求,这是地址。

1. 转场动画使用
iOS添加自定义转场动画和交互动画(二)_第1张图片
项目

项目本身是个例子,实际封装部分是图里的红框部分,animations路径下是各种动画类型。

(1)首先指定委托,如果你想要修改navigationController的转场效果:

//注意weak
weak var transitionDelegate :TFTransitionAnimationDelegate! = TFTransitionAnimationDelegate.sharedInstance

self.navigationController?.delegate = transitionDelegate

想要present\dismiss的效果:

let nextVC = NextViewController()
nextVC.transitioningDelegate = transitionDelegate

即用TFTransitionAnimationDelegate承担了提供转场动画,和控制交互动画的责任。

(2)指定需要的动画效果:

//指定自定义的推出和返回转场动画
        transitionDelegate.dismissionTransition = TFZoomInTransitionAnimator(duration: 1, originFrame: imageView.frame)
        transitionDelegate.presentationTransition = TFSwipeLeftTransitionAnimator(duration: 0.35)

动画效果是使用TFTransitionAnimator的子类,每个子类对应不同的动画效果。

(3)然后...然后没有了,就这么简单!

在push的时候,动画就是指定的动画了。

2. 交互动画使用

以present为例,比如你想向左滑动present到nextVC(上一篇里有gif效果图):

override func viewDidAppear(animated: Bool) {
        let nextVC = NextViewController()
        nextVC.imageView.image = self.imageView.image
        nextVC.transitioningDelegate = transitionDelegate
        
        //开启交互动画
        self.openIntactiveTarnsitionWith(.SwipeLeft, presentType: .ModalPresent, toViewController: nextVC)
    }

一句代码搞定,3个参数:

  • interactiveType 交互方式,即手势
  • presentType 转场类型,push\pop等
  • toViewController 转场的目的界面

即告诉TFTransitionAnimationDelegate:以什么手势触发,然后以什么转场方式,到达什么界面。不过,pop和dismiss时候就不用指定toViewController了。

需要注意的是:interactiveType会覆盖,比如我添加了向右滑动来push,又添加向右滑动dismiss,前面的push就无效了。但是向右和向下是不会冲突的。

相册浏览大图就可以用zoomOut动画,类似豆瓣小事的关闭详情界面就是swipeDown动画+swipeDown手势,在触控板上左划、右划可以切换Xcode的内容页面,这种效果可以swipeLeft手势来push+swipeRight手势pop来实现等。

你可能感兴趣的:(iOS添加自定义转场动画和交互动画(二))