JNWSpringAnimation
JNWSpringAnimation是Jonathan Willing,一個(gè)Mac和iOS開(kāi)發(fā)者,寫(xiě)的一個(gè)很棒的動(dòng)畫(huà)框架。要理解它為什么棒,讓我們先回過(guò)頭再一次談?wù)凜ore Animation率拒。
如我之前所說(shuō),Core Animation的時(shí)間曲線是由三維貝塞爾曲線定義的禁荒。你可以告訴一個(gè)動(dòng)畫(huà)去使用線性猬膨、淡入、淡入淡出或者淡出時(shí)間曲線呛伴,或者你可以手動(dòng)設(shè)置曲線的控制點(diǎn)勃痴,就如你可以在CSS動(dòng)畫(huà)中使用三維貝塞爾動(dòng)畫(huà)時(shí)間函數(shù)。
然而热康,你不能用這種方式定義彈簧動(dòng)作動(dòng)畫(huà)曲線召耘,因?yàn)樗麄兊男螤钐呒?jí)了。所以你可以怎么做呢褐隆?我們可以創(chuàng)建類(lèi)似這個(gè)的其他什么動(dòng)作嗎?
蘋(píng)果還給開(kāi)發(fā)者提供了一種稱(chēng)為CAKeyframeAnimation
的特殊的動(dòng)畫(huà)類(lèi)別庶弃,用來(lái)代替無(wú)憂的像我們之前討論的動(dòng)畫(huà)(你定義開(kāi)始和結(jié)束值并讓Core Animation為你計(jì)算中間值)
關(guān)鍵幀動(dòng)畫(huà)是指你給系統(tǒng)提供一系列的值(用來(lái)改變物體的位置、旋轉(zhuǎn)德澈、比例等等歇攻。)然后它會(huì)根據(jù)你定義的時(shí)間間隔一步步地改變你列出來(lái)的值。你可以使用關(guān)鍵幀動(dòng)畫(huà)來(lái)創(chuàng)建多重部分的動(dòng)畫(huà)梆造,其中一些物體在開(kāi)始的幾秒移動(dòng)到一個(gè)位置缴守,然后移動(dòng)到另一個(gè)方向。你還可以改變每段的時(shí)間曲線镇辉。
JNWSpringAnimation工作的方式就是定義你的彈簧的關(guān)鍵屬性屡穗,例如阻尼、剛度和質(zhì)量忽肛,然后告訴它你要?jiǎng)赢?huà)的屬性是什么村砂,JNWSpringAnimation就會(huì)為你創(chuàng)建一個(gè)包含你的動(dòng)畫(huà)的大量值的CAKeyframeAnimation
,在到達(dá)最終值前彈簧動(dòng)作曲線中的每1/60秒都有值屹逛。接著础废,你要做的只是將這個(gè)關(guān)鍵幀動(dòng)畫(huà)添加到你想要?jiǎng)赢?huà)的CALayer
中去汛骂,(可以是它自己的layer,或者是一個(gè)UIView
的layer屬性)评腺,Core Animation會(huì)一步步地執(zhí)行每個(gè)關(guān)鍵幀帘瞭,每秒60次,直到它到達(dá)最終位置動(dòng)畫(huà)就結(jié)束了蒿讥。系統(tǒng)不需要知道你是如何生產(chǎn)關(guān)鍵幀列表中的所有值的蝶念,也不需要知道它會(huì)產(chǎn)生什么類(lèi)型的動(dòng)作,它只是盲目地在每一步按照你想要的方式改變動(dòng)畫(huà)屬性诈悍。
詳細(xì)地說(shuō)的話祸轮,JNWSpringAnimation獲取你給它的用來(lái)描述你想要在動(dòng)作中模仿的彈簧的值,并用代碼繪制真實(shí)的彈簧曲線侥钳。然后生成所有的動(dòng)畫(huà)關(guān)鍵幀值适袜,它本質(zhì)上在曲線上每次只走非常小的一步來(lái)定義曲線上每1/60秒的值。那就是為物體移動(dòng)過(guò)程中每個(gè)位置的值舷夺。完成這個(gè)過(guò)程會(huì)非晨嘟矗快,因?yàn)橐趧?dòng)畫(huà)開(kāi)始前就全部準(zhǔn)備好给猾。
查看完整合集:https://github.com/Cloudox/Motion-Design-for-iOS