iOS添加自定義轉(zhuǎn)場(chǎng)動(dòng)畫(huà)和交互動(dòng)畫(huà)(二)

了解了轉(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)目

項(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)等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容