iOS印象筆記交互動畫 OC完善版本

前人種樹

一直想知道 iOS 端的印象筆記(當(dāng)然是老版本了,最新的印象筆記已經(jīng)放棄了這個坑人的動畫)是如何實現(xiàn)的梨睁,在網(wǎng)上搜到了這篇印象筆記交互效果(swift)岭佳,UI 和效果做得都非常好锋华。于是乎怎么也得學(xué)習(xí)學(xué)習(xí)吧披诗,用 OC copy 一份吧迫吐。于是乎開始了踩坑之路。

首先琐鲁,allsome(swift 印象筆記作者)這個 Demo,實現(xiàn)思路是首頁使用 UICollectionView 實現(xiàn)人灼,滑動時候?qū)崟r改變 cell 的 frame 實現(xiàn)類似彈簧的效果围段。但是, 其實這個 Demo有很多的 bug 沒有處理投放,但是仍然是一個很好的思路奈泪,要不是這個 Demo,估計自己怎么也寫不出這個動畫灸芳。

然后涝桅,這個 Demo 的 bug 其實并不是那么容易處理的,我特意抓取了印象筆記 7.18 版本的舊包烙样,發(fā)現(xiàn)印象筆記原版也存在這個 bug冯遂,說不定這就是他們改版的原因呢,哈哈谒获。

下面具體看下這個 bug蛤肌,

bug.gif

造成這個 bug 的主要原因還是用了手勢,在自定義專場中使用了轉(zhuǎn)場手勢批狱,根據(jù)手勢偏移比例可以控制轉(zhuǎn)場的進(jìn)度裸准。

熟悉轉(zhuǎn)場動畫的人應(yīng)該知道,手勢驅(qū)動有一個 bug:假如你設(shè)定赔硫,拖拽比例超過0.5狼速,才決定完成動畫,否則取消動畫。那么當(dāng)你拖拽比例是0.3的時候向胡,那轉(zhuǎn)場動畫就進(jìn)行0.3的比例恼蓬,這個時候松手,轉(zhuǎn)場動畫會重新回到0僵芹,但是屏幕會閃一下处硬。也就是轉(zhuǎn)場從0.3直接回到了0,沒有任何過渡拇派,所以視覺上會閃一下荷辕。

等等,這個 bug 并不是每個轉(zhuǎn)場動畫都會有的件豌,要看你怎么轉(zhuǎn)了疮方,這句話怎么講?我在學(xué)習(xí)轉(zhuǎn)場動畫的時候看了喵神的博客里iOS7中的 VC 切換茧彤,里面的 demo 并不會因為拖拽比例不足返回時發(fā)生卡頓骡显,效果如下

無寬高改變.gif

因為這個 Demo,在 dismiss 控制器的時候只是簡單的讓控制器 y 的值從上往下偏移了一個屏幕的距離曾掂,沒有任何寬度和高度的改變惫谤,不會觸發(fā)這個 bug。我把這個 Demo 簡單的改了一下珠洗,dismiss 的時候會同時改變控制器的寬和高溜歪,然后這個惡心的 bug 就會出現(xiàn)了


寬高改變.gif
后人完善

我在wazrx的這篇文章中找到了解決方案,那就是在手勢拖拽比例達(dá)不到我們指定的比例時许蓖,開啟一個CADisplayLink定時器不斷更新轉(zhuǎn)場的進(jìn)度蝴猪,比較好的解決了動畫生硬這個問題。

解決這個主要的 bug 之后膊爪,自己再把一些細(xì)枝末節(jié)完善了一下自阱,就寫成了現(xiàn)在這個 印象筆記 OC

oc.gif
總結(jié)

簡單說一下完成印象筆記的這個Demo需要哪些知識點吧, 其實就兩個:

  1. 彈簧效果(嚴(yán)格說這個 demo 實現(xiàn)的并不是彈框效果蚁飒,沒有使用到UIDynamic的性質(zhì))
  2. 自定義轉(zhuǎn)場

在寫這個 Demo 之前特意看了喵神的彈簧效果筆記动壤。但是看到 swift 版本的 Demo 的時候發(fā)現(xiàn)原作者并沒有使用這個效果,而是在 collectionView 滑動的時候動態(tài)計算了每個 cell 的 frame淮逻,改變了每個 cell 的 y 值琼懊,從而實現(xiàn)了這個效果,不得不說非常棒爬早!因為如果使用了 UIDynamic 實現(xiàn)彈簧效果哼丈,在點擊 cell 進(jìn)入轉(zhuǎn)場動畫的時候會非常混亂筛严。所以原作者這個方法簡單醉旦,實用!

轉(zhuǎn)場動畫具體介紹網(wǎng)上實在太多了,可以自行百度车胡,google檬输。主要思想其實是: 以前怎么 modal 一個控制器是系統(tǒng)自己決定的,怎么 dismiss 也是系統(tǒng)決定的匈棘。 iOS7之后丧慈,Apple 提供了一套 API 給我們,我們可以自己決定如何 dismiss主卫,如何 modal逃默。

allsome的 swift 版本的 demo 中,所有轉(zhuǎn)場代理都在一個文件里簇搅,我為了讓結(jié)構(gòu)更加清晰完域,把轉(zhuǎn)場代理全部分開,一共三個文件瘩将。

  1. 告訴我你想如何 present 一個控制器吟税。
  2. 告訴我你想如何 dissmiss 掉一個控制器。
  3. 告訴我你手勢驅(qū)動比例和dismiss 控制器的關(guān)系鸟蟹。
Snip20170510_1.png
最后的一點討論

這個 Demo 中乌妙,點擊 collectionView 的 cell使兔,present出 MYNoteVC建钥。
然后在使用手勢 dismiss 的時候,只要手勢開始 MYNoteVC 的 view 就被我們隱藏了虐沥,動畫效果全部在 collectionView 上完成熊经,所以手勢沒有完成的時候開啟定時器,我們其實是對collectionView 做動畫欲险,正因為這個特性镐依,才能使用定時器這個技巧解決動畫生硬的問題。 如果我們直接對 MYNoteVC 做動畫的話天试,定時器這個技巧也不能很好的完成這個動畫槐壳,但是為什么wazrx的這篇文章的 Demo 里都沒有任何不妥呢,原因有兩個

  • wazrx 的這個 Demo 里 A -> B喜每,B在dismiss 的時候?qū)嶋H上是對 B 的 view 的截圖進(jìn)行動畫务唐,并不是真正的 B 的 View。那印象筆記的 Demo 為什么不能對截圖做動畫呢带兜? 因為還要實時改變控制器 title 和返回圖標(biāo)的 frame 和 alpha枫笛。

  • 印象筆記的 Demo 里 A -> B, B在dismiss的時候是先隱藏 B,實際對 A 進(jìn)行動畫刚照。因為 A 和 B 長得一樣刑巧,所以并看不出來。如果 B在 dismiss 的時候就真的對 B 進(jìn)行動畫,那么手勢取消的時候還是會有bug啊楚。

本文 Demo
allsome的印象筆記 Swift
wazrx轉(zhuǎn)場取消時開啟定時器文章

好像也沒什么可說的吠冤,只有動手寫了,才更明白恭理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咨演,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚯斯,更是在濱河造成了極大的恐慌薄风,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拍嵌,死亡現(xiàn)場離奇詭異遭赂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)横辆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門撇他,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狈蚤,你說我怎么就攤上這事困肩。” “怎么了脆侮?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵锌畸,是天一觀的道長。 經(jīng)常有香客問我靖避,道長潭枣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任幻捏,我火速辦了婚禮盆犁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘篡九。我一直安慰自己谐岁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布榛臼。 她就那樣靜靜地躺著伊佃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讽坏。 梳的紋絲不亂的頭發(fā)上锭魔,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音路呜,去河邊找鬼迷捧。 笑死织咧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的漠秋。 我是一名探鬼主播笙蒙,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼庆锦!你這毒婦竟也來了捅位?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤搂抒,失蹤者是張志新(化名)和其女友劉穎艇搀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體求晶,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡焰雕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了芳杏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矩屁。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖爵赵,靈堂內(nèi)的尸體忽然破棺而出吝秕,到底是詐尸還是另有隱情,我是刑警寧澤空幻,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布烁峭,位于F島的核電站,受9級特大地震影響氛悬,放射性物質(zhì)發(fā)生泄漏则剃。R本人自食惡果不足惜耘柱,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一如捅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧调煎,春花似錦镜遣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娄柳,卻和暖如春寓辱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赤拒。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工秫筏, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留诱鞠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓这敬,卻偏偏與公主長得像航夺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子崔涂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

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