了解了轉(zhuǎn)場(chǎng)動(dòng)畫(huà)的流程后,我就想封裝下,然后可以一句代碼搞定轉(zhuǎn)場(chǎng)動(dòng)畫(huà)。因?yàn)檫@個(gè)在需求上就是一句話(huà),比如A要push到B了,那么想這個(gè)轉(zhuǎn)場(chǎng)就用B逐漸方法然后把A遮蓋的效果
。我不要再去實(shí)現(xiàn)什么navigationController的委托方法、還要又去實(shí)現(xiàn)一邊動(dòng)畫(huà)效果。
研究了下,基本達(dá)到了需求,這是地址。
1. 轉(zhuǎn)場(chǎng)動(dòng)畫(huà)使用
項(xiàng)目本身是個(gè)例子,實(shí)際封裝部分是圖里的紅框部分,animations路徑下是各種動(dòng)畫(huà)類(lèi)型。
(1)首先指定委托,如果你想要修改navigationController的轉(zhuǎn)場(chǎng)效果:
//注意weak
weak var transitionDelegate :TFTransitionAnimationDelegate! = TFTransitionAnimationDelegate.sharedInstance
self.navigationController?.delegate = transitionDelegate
想要present\dismiss的效果:
let nextVC = NextViewController()
nextVC.transitioningDelegate = transitionDelegate
即用TFTransitionAnimationDelegate承擔(dān)了提供轉(zhuǎn)場(chǎng)動(dòng)畫(huà),和控制交互動(dòng)畫(huà)的責(zé)任。
(2)指定需要的動(dòng)畫(huà)效果:
//指定自定義的推出和返回轉(zhuǎn)場(chǎng)動(dòng)畫(huà)
transitionDelegate.dismissionTransition = TFZoomInTransitionAnimator(duration: 1, originFrame: imageView.frame)
transitionDelegate.presentationTransition = TFSwipeLeftTransitionAnimator(duration: 0.35)
動(dòng)畫(huà)效果是使用TFTransitionAnimator的子類(lèi),每個(gè)子類(lèi)對(duì)應(yīng)不同的動(dòng)畫(huà)效果。
(3)然后...然后沒(méi)有了,就這么簡(jiǎn)單!
在push的時(shí)候,動(dòng)畫(huà)就是指定的動(dòng)畫(huà)了。
2. 交互動(dòng)畫(huà)使用
以present為例,比如你想向左滑動(dòng)present到nextVC(上一篇里有g(shù)if效果圖):
override func viewDidAppear(animated: Bool) {
let nextVC = NextViewController()
nextVC.imageView.image = self.imageView.image
nextVC.transitioningDelegate = transitionDelegate
//開(kāi)啟交互動(dòng)畫(huà)
self.openIntactiveTarnsitionWith(.SwipeLeft, presentType: .ModalPresent, toViewController: nextVC)
}
一句代碼搞定,3個(gè)參數(shù):
- interactiveType 交互方式,即手勢(shì)
- presentType 轉(zhuǎn)場(chǎng)類(lèi)型,push\pop等
- toViewController 轉(zhuǎn)場(chǎng)的目的界面
即告訴TFTransitionAnimationDelegate:以什么手勢(shì)觸發(fā),然后以什么轉(zhuǎn)場(chǎng)方式,到達(dá)什么界面。不過(guò),pop和dismiss時(shí)候就不用指定toViewController了。
需要注意的是:interactiveType會(huì)覆蓋,比如我添加了向右滑動(dòng)來(lái)push,又添加向右滑動(dòng)dismiss,前面的push就無(wú)效了。但是向右和向下是不會(huì)沖突的。
相冊(cè)瀏覽大圖就可以用zoomOut動(dòng)畫(huà),類(lèi)似豆瓣小事的關(guān)閉詳情界面就是swipeDown動(dòng)畫(huà)+swipeDown手勢(shì),在觸控板上左劃、右劃可以切換Xcode的內(nèi)容頁(yè)面,這種效果可以swipeLeft手勢(shì)來(lái)push+swipeRight手勢(shì)pop來(lái)實(shí)現(xiàn)等。