ThinkVerb基于 CoreAnimation 的動(dòng)畫庫(kù)
ThinkVerb
ThinkVerb 是一組基于 CoreAnimation 的 API,相比與直接使用 CoreAnimation,ThinkVerb 通過鏈?zhǔn)秸Z法進(jìn)行編程,并且自管理 CAAnimation,你無需自己手動(dòng)創(chuàng)建任何 CAAnimation 并將其添加到視圖上。
得益于此,ThinkVerb 可以用非常少的代碼快速生成基礎(chǔ)動(dòng)畫,不單單如此,你說寫的代碼還相當(dāng)可讀而易于維護(hù)。
目前 ThinkVerb 的功能幾乎涵蓋了所有的基礎(chǔ)動(dòng)畫,你可以輕松多個(gè)基礎(chǔ)動(dòng)畫的組合來生成一個(gè)復(fù)雜的動(dòng)畫。如果用原生代碼,你可能需要大量代碼來完成此工作,但是用 ThinkVerb,你則可以在短短幾行代碼里完成相同的工作量。
Usage
ThinkVerb 很簡(jiǎn)單,它只有一個(gè)入口,那就是ThinkVerb擴(kuò)展 UIView 的一個(gè)屬性:TVAnimation。
TVAnimation 管理所有的動(dòng)畫單元,我們稱動(dòng)畫單元為 Sprite,你需要做的只有:通過 TVAnimation 創(chuàng)建 sprite,配置 sprite,最后 activate sprite。 這樣,動(dòng)畫就被激活,UIView 將自動(dòng)開始動(dòng)畫。
例如,如果你想永不停息地旋轉(zhuǎn)你的 UIView,你只需要下面這一句代碼:
NSString *rotation = view.TVAnimation.rotate.z.endAngle(M_PI * 2).repeat(-1).activate();
或者,如果你想為你創(chuàng)建的 sprite 定義你自己想要的名字,你可以這么寫:
view.TVAnimation.rotate.z.endAngle(M_PI * 2).repeat(-1).activateAs(@"rotation");
這行代碼會(huì)繞著 z 軸旋轉(zhuǎn)你的 UIView,其旋轉(zhuǎn)角度是從 UIView 當(dāng)前的角度旋轉(zhuǎn)到 M_PI * 2,假設(shè)當(dāng)前角度是 0,那就是轉(zhuǎn)一圈。repeat(-1) 能夠讓 sprite 無限重復(fù)。最后,調(diào)用 activate() 就等于激活了該動(dòng)畫。
通常情況下,如果你沒有讓 sprite 永遠(yuǎn)重復(fù)下去,或者沒有讓 sprite 在動(dòng)畫結(jié)束時(shí)停留,sprite 會(huì)自動(dòng)被移除并釋放,而如上面的例子,你需要手動(dòng)移除該動(dòng)畫:
view.TVAnimation.clear();
上面一行代碼移除 view 的所有動(dòng)畫,通常情況下,你調(diào)用這一行代碼就夠了,如果你不想對(duì) view 的其他動(dòng)畫造成影響,你可以只移除相應(yīng)的動(dòng)畫:
view.TVAnimation.existSprite(rotation).stop();
如果你自己定義了名字,你可以這么做:
view.TVAnimation.existSprite(@"rotation").stop();
這樣,旋轉(zhuǎn)會(huì)停止,sprite 會(huì)被移除并釋放,否則,就算 view 釋放掉了,sprite 也不會(huì)被釋放,從而造成內(nèi)存泄漏。
你可以通過 ThinkVerbDemo 看到更多的例子。
ThinkVerb 做復(fù)雜動(dòng)畫也是相當(dāng)輕松的,你甚至可以寫出一把手槍來:
view.TVAnimation.appearance.duration(3).timing(TVTiming.extremeEaseOut).end();
view.TVAnimation.contents.drawRange(nil,[UIImage imageNamed:@"1"]).didStop(^{
view.TVAnimation.contents.drawRange([UIImage imageNamed:@"1"],[UIImage imageNamed:@"2"]).didStop(^{
view.TVAnimation.contents.drawRange([UIImage imageNamed:@"2"],[UIImage imageNamed:@"3"]).didStop(^{
view.TVAnimation.contents.drawRange([UIImage imageNamed:@"3"],[UIImage imageNamed:@"2"]).activate();
}).activate();
}).activate();
}).activate();
Installation
Using cocoapods
pod 'ThinkVerb'
Copy files
拷貝子 ThinkVerb 文件夾下的所有源碼到你的工程
Indexes
-
Basic
-
move
從某個(gè)點(diǎn)移動(dòng) view 到另一個(gè)點(diǎn) -
scale
將 view 縮放到某個(gè)倍數(shù) -
rotate
圍繞 x/y/z 軸旋轉(zhuǎn) view -
shadow
對(duì) shadow 的 offset/opacity/radius/color 做動(dòng)畫, -
bounds
對(duì) view 的 bounds 做動(dòng)畫,注意該動(dòng)畫效果取決于 anchorPoint -
anchor
對(duì) view 的 anchorPoint 做動(dòng)畫,單獨(dú)進(jìn)行不會(huì)有任何效果,需要和相關(guān)的動(dòng)畫組合才會(huì)有效果 -
translate
通過偏移來移動(dòng)動(dòng)畫,基于 Transform3D,所以你可以將它應(yīng)用到 sublayer 上 -
fade
淡入淡出 -
contents
對(duì) cotnents 屬性做動(dòng)畫,如 rect屬性會(huì)對(duì)位圖的渲染返回做動(dòng)畫,范圍在 [0 0 1 1] 內(nèi) -
backgroundColor
背景變換 -
cornerRadius
圓角動(dòng)畫 -
border
對(duì) view 的邊框的寬度和顏色做動(dòng)畫 -
path
對(duì) view 做關(guān)鍵幀動(dòng)畫,可通過貝塞爾控制點(diǎn)生成曲線動(dòng)畫
-
-
Appearance
appearance sprite 可以用來對(duì)某個(gè) view 配置默認(rèn)參數(shù),如果你想讓某個(gè) view 的所有 sprite 默認(rèn)在動(dòng)畫結(jié)束時(shí)停留而不移除,你可以在生成 sprite 之前寫:
view.TVAnimation.appearance.keepAlive(YES).end();
License
ThinkVerb is released under the MIT license. See LICENSE for details.
