了解了转场动画的流程后,我就想封装下,然后可以一句代码搞定转场动画。因为这个在需求上就是一句话,比如A要push到B了,那么想这个转场就用B逐渐方法然后把A遮盖的效果
。我不要再去实现什么navigationController的委托方法、还要又去实现一边动画效果。
研究了下,基本达到了需求,这是地址。
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来实现等。
网友评论