iOS-OC-自定義轉(zhuǎn)場(chǎng)動(dòng)畫

最近一段時(shí)間學(xué)習(xí)了不少新的技術(shù)传睹,一方面是做做總結(jié)以免自己忘記,另一方面也想分享給有需要的網(wǎng)友忠荞。如有不足希望各位網(wǎng)友幫我斧正蒋歌。


概述

自IOS7只有,蘋果開放了新的UIViewController之間的轉(zhuǎn)場(chǎng)動(dòng)畫委煤,開發(fā)者可以實(shí)現(xiàn)諸多酷炫的跳轉(zhuǎn)動(dòng)畫以及特殊的運(yùn)行堂油。本文主要先介紹UINavigation的非交互的自定義轉(zhuǎn)場(chǎng)動(dòng)畫,其他擴(kuò)展將在下一篇文章中進(jìn)行介紹碧绞。

先來個(gè)簡單的縮放轉(zhuǎn)場(chǎng)效果圖:

zoomTransition.gif

進(jìn)入正文:

在UINavigation的非交互的自定義轉(zhuǎn)場(chǎng)動(dòng)畫中府框,蘋果將此功能做成了一個(gè)協(xié)議UIViewControllerAnimatedTransitioning。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

蘋果官方對(duì)此協(xié)議的解釋為:該協(xié)議中的方法允許您定義一個(gè)動(dòng)畫對(duì)象讥邻,該對(duì)象創(chuàng)建用于在一段固定的時(shí)間內(nèi)將視圖控制器轉(zhuǎn)換為或關(guān)閉屏幕的動(dòng)畫迫靖。您使用此協(xié)議創(chuàng)建的動(dòng)畫不能是交互式的。要?jiǎng)?chuàng)建交互式轉(zhuǎn)換兴使,您必須將您的動(dòng)畫對(duì)象與控制動(dòng)畫時(shí)間的另一個(gè)對(duì)象相結(jié)合系宜。

廢話了那么多,直接開始代碼第一步发魄,創(chuàng)建NSObject類盹牧,來遵循UIViewControllerAnimatedTransitioning協(xié)議。

創(chuàng)建一個(gè)遵循UIViewControllerAnimatedTransitioning協(xié)議的NSObject類

方框1:設(shè)置枚舉類別励幼,用于區(qū)別跳轉(zhuǎn)的模式 ? 方框2:遵循UIViewControllerAnimatedTransitioning協(xié)議

遵循協(xié)議之后我們需要在.m文件中寫入兩個(gè)協(xié)議中的方法汰寓。

方框1:這個(gè)方法主要是設(shè)置轉(zhuǎn)場(chǎng)動(dòng)畫的時(shí)間,以及用于百分比驅(qū)動(dòng)的交互轉(zhuǎn)換苹粟,以及容器控制器(也就是可交互轉(zhuǎn)場(chǎng)動(dòng)畫)

方框2:我們定義的轉(zhuǎn)場(chǎng)動(dòng)畫都在此方法中實(shí)現(xiàn)有滑。對(duì)此我們首先需要的是在transitionContext(轉(zhuǎn)場(chǎng)控制器)中設(shè)置起始控制器和目的控制器。之后我們根據(jù)跳轉(zhuǎn)模式將這兩個(gè)控制器寫入到transitionContext中嵌削。

方框3的方法如下:

方框3方法

方框1中:是將起始和目的控制器添加到轉(zhuǎn)場(chǎng)環(huán)境中毛好,這里有一個(gè)視圖的層級(jí)關(guān)系望艺,insertSubView中的視圖層級(jí)要比abvoeSubView中的要高,也就是說insertSubView的顯示是在abvoeSubView上面的睛榄。

需要注意的是:當(dāng)push和pop時(shí)荣茫,起始和目的控制器是相反的,所以網(wǎng)友在進(jìn)行自定義動(dòng)畫的時(shí)候務(wù)必要搞清楚順序场靴,要不然會(huì)出現(xiàn)控制器銷毀錯(cuò)誤,程序黑屏的情況港准。建議不熟悉的網(wǎng)友可以NSLog打印出startViewController和endViewController旨剥,以便整理思路。

方框2中:[transitionContext transitionWasCancelled]方法用于判斷當(dāng)前的轉(zhuǎn)場(chǎng)是否完成浅缸;[transitionContext completeTransition:]是當(dāng)轉(zhuǎn)場(chǎng)完成(或被取消)時(shí)轨帜,必須調(diào)用此方法。通常這是由對(duì)象符合UIViewControllerAnimatedTransitioning協(xié)議調(diào)用公開的過渡委托衩椒。對(duì)于純粹的交互式轉(zhuǎn)換蚌父,應(yīng)該由交互控制器調(diào)用。這個(gè)方法有效地更新了內(nèi)部視圖轉(zhuǎn)換結(jié)束時(shí)的控制器狀態(tài)毛萌。否則程序crash苟弛。


將遵循UIViewControllerAnimatedTransitioning的類創(chuàng)建好之后,我們開始第二步:使用這個(gè)類阁将。

這里需要注意的是膏秫,我們的navigation需要遵循UINavigationControllerDelegate協(xié)議,因?yàn)槲覀兊认滦枰褂肬INavigationControllerDelegate中的方法來返回我們的自定義動(dòng)畫做盅。

在viewDidLoad中申明代理缤削,由于轉(zhuǎn)場(chǎng)動(dòng)畫沖突,會(huì)導(dǎo)致UINavigation自帶的右滑返回上一層控制的手勢(shì)失效吹榴,所以方框1是重新設(shè)置右滑返回的代理亭敢。


這個(gè)方法是UINavigationControllerDelegate中的代理方法,用于返回實(shí)現(xiàn)自定義轉(zhuǎn)場(chǎng)動(dòng)畫图筹。需要注意的是方框1帅刀,operation可以辨識(shí)push和pop跳轉(zhuǎn)方式,所以我們需要提前判斷婿斥,然后做出相對(duì)應(yīng)的轉(zhuǎn)場(chǎng)動(dòng)畫劝篷。方框2中,是在跳轉(zhuǎn)時(shí)對(duì)起始和目的控制器做一下判斷民宿,這樣做的好處是娇妓,當(dāng)一個(gè)控制器有跳轉(zhuǎn)到多個(gè)控制器功能且只對(duì)指定目的控制器有自定義轉(zhuǎn)場(chǎng)動(dòng)畫時(shí),避免其他不相干的控制器實(shí)現(xiàn)自定義轉(zhuǎn)場(chǎng)功能活鹰。

需要注意的是:operation的push和pop狀態(tài)哈恰,fromVC和toVC是相反的只估,希望注意,避免不必要的錯(cuò)誤着绷,同樣各位也可以NSLog打印出來蛔钙,以便更好的理解。



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荠医,一起剝皮案震驚了整個(gè)濱河市吁脱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌彬向,老刑警劉巖兼贡,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異娃胆,居然都是意外死亡遍希,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門里烦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凿蒜,“玉大人,你說我怎么就攤上這事胁黑》戏猓” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵别厘,是天一觀的道長虱饿。 經(jīng)常有香客問我,道長触趴,這世上最難降的妖魔是什么氮发? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮冗懦,結(jié)果婚禮上爽冕,老公的妹妹穿的比我還像新娘。我一直安慰自己披蕉,他們只是感情好颈畸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著没讲,像睡著了一般眯娱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爬凑,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天徙缴,我揣著相機(jī)與錄音,去河邊找鬼嘁信。 笑死于样,一個(gè)胖子當(dāng)著我的面吹牛疏叨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穿剖,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼蚤蔓,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了糊余?” 一聲冷哼從身側(cè)響起秀又,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贬芥,沒想到半個(gè)月后涮坐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡誓军,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疲扎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昵时。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖椒丧,靈堂內(nèi)的尸體忽然破棺而出壹甥,到底是詐尸還是另有隱情,我是刑警寧澤壶熏,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布句柠,位于F島的核電站,受9級(jí)特大地震影響棒假,放射性物質(zhì)發(fā)生泄漏溯职。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一帽哑、第九天 我趴在偏房一處隱蔽的房頂上張望谜酒。 院中可真熱鬧,春花似錦妻枕、人聲如沸僻族。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽述么。三九已至,卻和暖如春愕掏,著一層夾襖步出監(jiān)牢的瞬間度秘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工亭珍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敷钾,地道東北人枝哄。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像阻荒,于是被迫代替她去往敵國和親挠锥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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