POP - 充滿物理效應(yīng)的動畫引擎

近期對 FaceBook 的 POP 動畫引擎由黑轉(zhuǎn)粉??,做個簡單小結(jié)。
不足之處望補充!

POP 是由 Kimon Tsinteris 開發(fā),F(xiàn)aceBook 開源的充滿物理效應(yīng)的動畫引擎。之前誤以為POP是基于Core Animation二次封裝的動畫效果,實際上POP可以對任何物體的任何屬性進行動畫!

框架總覽:

POP 由 1. Animations;2. Engine;3. Utility;4. WebCore 四部分組成。如下圖:


POP架構(gòu)
  • Engine 通過 CADisplayLink,將 App 的重繪速度設(shè)定到和屏幕刷新頻率一致 60 FPS,使得POP 動畫極為流暢,打造出一個游戲級的動畫引擎。著名的 Cocos-2d 也應(yīng)用了這個重要的技術(shù)。

  • Utility 與 WebCore 提供了 POP 的各項復(fù)雜計算的基本支持(其中 WebCore 里包含了一些從 Apple 的開源的網(wǎng)頁渲染引擎里拿出的源文件)。

POP - Animations 類型

1.Spring Animation 彈性動畫
* Bounciness 反彈-影響動畫作用的參數(shù)的變化幅度
* Speed 速度
* Tension 拉力-影響回彈力度以及速度
* Friction 摩擦力-如果開啟,動畫會不斷重復(fù),幅度逐漸削弱,直到停止。
* Mass 質(zhì)量-細微的影響動畫的回彈力度以及速度

使用案例:

POPSpringAnimation *spring = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY]; 
spring.toValue = [NSValue valueWithCGPoint:CGPointMake(2.0, 2.0)]; 
spring.springBounciness = 4.0; 
spring.springSpeed = 12.0; 
spring.completionBlock = ^(POPAnimation *spring, BOOL finished) { 
if (finished) {NSLog(@"Animation finished!");}};

因此我們要使用 toValue 來告訴 POP 我們希望分別縮放幾倍,如果你不提供 fromValue,那么 POP 將默認從當前的大小為依據(jù)進行縮放。值得一提的是,toValue 這里的值要和動畫作用的屬性一樣的結(jié)構(gòu)。如果我們操作 bounds ,那么這里應(yīng)該是 [NSValue valueWithCGRect:CGRectMake(0.0, 0.0, 200.0,400.0)]。

completionBlock 提供了一個 Callback,動畫的執(zhí)行過程會不斷調(diào)用這個 block,finished 這個布爾變量可以用來做動畫完成與否的判斷。

最后我們使用 pop_addAnimation 來讓動畫開始生效,如果你想刪除動畫的話,那么你需要調(diào)用 pop_removeAllAnimations 。 與 iOS 自帶的動畫不同,如果你在動畫的執(zhí)行過程中刪除了物體的動畫,那么物體會停在動畫狀態(tài)的最后一個瞬間,而不是閃回開始前的狀態(tài)

2.Decay Animation 衰減動畫

Decay Animation 實現(xiàn)了一個衰減效果。主要由 veiocity 速率參數(shù)控制效果。和iOS 7 提供的UI Dynamic 類似。使用方法如下:

POPDecayAnimation *decay = [POPDecayAnimation animWithPropertyNamed:kPOPLayerPositionX]; 
decay.velocity = @(100.0); 
decay.fromValue =  @(25.0); 
//decay.deceleration = 0.998; 
decay.completionBlock = ^(POPAnimation *decay, BOOL finished) { 
  if (finished) {NSLog(@"Stop!");}}; 

物體從 X 坐標的點 25.0 開始按照速率 100點/s 做減速運動,
velocity 是負值,那么就會反向遞減。
deceleration (負加速度) 是一個你會很少用到的值,默認是就是我們地球的 0.998,如果你開發(fā)給火星人用,那么這個值你使用 0.376 會更合適。

3.Property Animation & Basic Animation

可以對任何物體的任何屬性進行動畫,Spring Animation 和 Decay Animation 都是繼承自這個類
使用案例:

POPBasicAnimation *basic = [POPBasicAnimation animation]; 
basic.duration = 10.0; 
basic.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
POPAnimatableProperty * prop = [POPAnimatableProperty propertyWithName:@"count" initializer:^(POPMutableAnimatableProperty *prop) { prop.readBlock = ^(id obj, CGFloat values[]) { 
    values[0] = [[obj description] floatValue];}; 
  prop.writeBlock = ^(id obj, const CGFloat values[]) { 
    [obj setText:[NSString stringWithFormat:@"%.2f",values[0]]];}; 
  prop.threshold = 0.01;}]; 
basic.property = prop; 
basic.fromValue = @(0.0); 
basic.toValue = @(100.0);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 目錄 ** UIView 動畫 ** ** Core Animation ** ** FaceBook POP動畫...
    方向_4d0d閱讀 1,651評論 0 3
  • IOS FACEBOOK POP動畫詳解 POP框架介紹 POP 的架構(gòu) 架構(gòu)知識了解下就行 POP 目前由四部...
    leonardni閱讀 3,119評論 0 11
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,241評論 4 61
  • 在我們的眼里,讓學(xué)生怨恨的教師一定是打罵、體罰、惡意訓(xùn)斥或引發(fā)強烈沖突的教師,但可曾想到,一些常常被教師們忽略的或...
    右鳴風閱讀 339評論 1 5
  • ---孤獨有罪 有504棵銀杏;1008棵楊柳;雞籠里有2566只雞;池塘里有21...
    誰說曲高和寡閱讀 358評論 4 2