Lottie簡介 & iOS集成使用

Life

Lottie介紹

“Lottie is a library for Android, iOS, Web, and Windows that parse Adobe After Effects animations exported as json with bodymovin and renders them natively on mobile and on the web!” - 自官網(wǎng):http://airbnb.io/lottie/#/

大致意思是:Lottie是一個可以解析使用【bodymovin】插件從 Adobe After Effects 中導(dǎo)出的格式為 json 的文件灯萍,并在 iOS届宠、Android攒岛、macOS耍属、React Native 和 Windows 中進(jìn)行解析使用的開源庫态鳖。

這個庫由 Airbnb 開發(fā)并在2017年2月份左右開源的。

看一下官方實現(xiàn)的一部分效果:


Community 2_3.gif

Examples1.gif

Examples2.gif

Examples3.gif

Examples4.gif

是不是很cool院塞!看到此庫我是非常喜歡開心的函卒!為什么呢?

先來腦補(bǔ)一些場景:
場景一:在開發(fā) app 過程中钉稍,需要在 app 中實現(xiàn)設(shè)計師提供的效果動畫涤躲,都是通過代碼來實現(xiàn),針對復(fù)雜的動畫贡未,開發(fā)同學(xué)更是會花費很長時間去實現(xiàn)种樱,如果是處女座的設(shè)計師,還會坐在開發(fā)同學(xué)旁邊“折磨”開發(fā)同學(xué)一起調(diào)細(xì)節(jié)羞秤,做過的同學(xué)一定深有體會缸托。

場景二:還有一些情況,因為實現(xiàn)動畫的開發(fā)成本比較高瘾蛋,比如需要1~2天去實現(xiàn)一個動畫效果俐镐,但是因為版本周期比較緊,會在無奈中砍掉或者簡化動畫哺哼,那么原本想提升用戶體驗的佩抹,卻打了折扣叼风。

總的來說,動畫要實現(xiàn)棍苹,需要設(shè)計師通過設(shè)計出來无宿,然后開發(fā)同學(xué)再通過代碼實現(xiàn)。開發(fā)完成后枢里,再和設(shè)計同學(xué)一起對代碼實現(xiàn)的效果進(jìn)行微調(diào)孽鸡,達(dá)到滿意效果。
那么對一些炫酷的栏豺、體驗非常好的動畫設(shè)計彬碱,開發(fā)的成本很高,雖然現(xiàn)在一些第三方的開源動畫可以參考奥洼,但是要做的有自己的特色巷疼,還是需要花時間去理解分析、實現(xiàn)灵奖、調(diào)試嚼沿。對一些迭代周期短的app來說,花那么多時間去做一個動畫瓷患,基本會被kill骡尽,設(shè)計同學(xué)一定很無奈和郁悶。

但是現(xiàn)在不同了N疚病1住!

Airbnb 開源的這個庫沙咏,應(yīng)該可以讓設(shè)計師和開發(fā)同學(xué)喜笑顏開了辨图。通過bodymovin 這個AE的插件,可以將AE設(shè)計好的動畫導(dǎo)出為json格式的文件肢藐。交給開發(fā)同學(xué)故河,開發(fā)同學(xué)通過集成Lottie庫,就可以讀取設(shè)計同學(xué)給到的json文件吆豹,在程序中通過幾行代碼就可以實現(xiàn)原本要花費1天甚至更久的時間來實現(xiàn)的動畫啦鱼的。是不是很cool?大大降低了開發(fā)同學(xué)的開發(fā)成本痘煤,而在客戶端上展示的動畫效果是和AE中的一樣的凑阶,不需要花額外時間和開發(fā)一起微調(diào)了,這樣一來衷快,開發(fā)同學(xué)就把時間和精力放在動畫以外的事情上就好了宙橱。boss開心了、設(shè)計同學(xué)開心了、開發(fā)同學(xué)也開心了师郑、用戶使用的也開心了环葵,皆大歡喜是不是??。


事事都不是完美的宝冕,通過對這個開源庫的初步了解來看张遭,大概可以看到以下的優(yōu)點和不足:

優(yōu)點:
1、開發(fā)成本低地梨。設(shè)計師導(dǎo)出 json 文件后菊卷,扔給開發(fā)同學(xué)即可。原本要1天甚至更久的動畫實現(xiàn)宝剖,現(xiàn)在只要不到一小時甚至更少時間了的烁。

2、動畫的實現(xiàn)成功率高了诈闺。設(shè)計師的成果可以最大程度得到實現(xiàn),試錯成本也低了铃芦。

3雅镊、支持服務(wù)端 URL 方式創(chuàng)建。所以可以通過服務(wù)端配置 json 文件刃滓,隨時替換客戶端的動畫仁烹,不用通過發(fā)版本就可以做到了。比如 app 啟動動畫可以根據(jù)活動需要進(jìn)行變換了咧虎。

4卓缰、性能∨樗校可以替代原來需要使用幀圖完成的動畫征唬。節(jié)省了客戶端的空間和加載的內(nèi)存。對硬件性能好一些茁彭。

5总寒、跨平臺。iOS理肺、安卓平臺可以使用一套文件摄闸。省時省力,動畫一致妹萨。不用設(shè)計師跑去兩邊去跟著微調(diào)確認(rèn)了年枕。

6、支持轉(zhuǎn)場動畫乎完。 PresentViewController/DismissViewController 時可以做轉(zhuǎn)場效果熏兄。(Demo 里有)

不足:
1、對一些AE的屬性支持不夠完全。

2霍弹、對系統(tǒng)平臺版本限制毫别,如 iOS8 及以上,安卓 API14 及以上典格。

3岛宦、對可交互的動畫暫時還不行。主要是以播放類型動畫耍缴。

因為開源時間不久砾肺,所以還存在一些不足和問題,希望 Airbnb 和大家能一起完善這個開源庫防嗡,讓更多酷炫变汪、體驗更好的動畫得以實現(xiàn)。給用戶帶來絕佳的體驗蚁趁。


Lottie支持的平臺:

支持:Android, iOS, Web, and Windows
當(dāng)然swift也支持H苟堋!他嫡!

注意:iOS 支持的版本是 iOS8 及以上番官,安卓需要 API14 及以上。

上面說了這么多钢属,Lottie是否是你需要的呢徘熔?如果是,那么請繼續(xù)向下看淆党!使用方法見下面??
因為我是做蘋果開發(fā)的酷师,所以我就說說針對蘋果的使用吧。


安裝插件

****bodymovin是一個AE的開源的插件染乌,我們需要先安裝這個插件到AE中山孔。****
1、下載bodymovin插件慕匠。https://github.com/bodymovin/bodymovin


2饱须、下載插件安裝器工具:http://aescripts.com/learn/zxp-installer/
打開http://aescripts.com/learn/zxp-installer/(zxp-installer安裝文件Mac+windows 鏈接: https://pan.baidu.com/s/1hrQaKPA 密碼: r3ni),看到下面的界面台谊,選自對應(yīng)的系統(tǒng)即可蓉媳,見下圖:

下載插件安裝器


3、插件安裝器下載成功后锅铅,根據(jù)上圖的提示進(jìn)行插件安裝即可:將第一步下載的 bodymovin.zxp 文件拖到安裝器界面酪呻,看到下面安裝成功的提示就代表安裝成了。

安裝插件成功


4盐须、安裝成功后打開AE玩荠,設(shè)置在首選項 ->常規(guī) ,將允許腳本寫入文件和訪問網(wǎng)絡(luò)選項勾選上。否則后面導(dǎo)出時會報錯阶冈。設(shè)置頁面見下圖:

首選項->常規(guī)

勾選上允許腳本寫入文件和訪問網(wǎng)絡(luò)


5闷尿、設(shè)置好以后,我們使用一個已經(jīng)制作好的 .aep 文件為例女坑,****使用bodymovin AE 導(dǎo)出 json ****文件填具。
狀態(tài)欄上選擇窗口 -> 擴(kuò)展 -> Bodymovin,見下圖:

到剛剛設(shè)置的導(dǎo)出目錄中找到文件匆骗,給到開發(fā)同學(xué)就可以了劳景。設(shè)計同學(xué)的工作基本OK了。
開發(fā)同學(xué)拿到j(luò)son文件怎么做呢碉就?接往下著看盟广!


Lottie集成到項目

https://github.com/airbnb/lottie-ios下載最新版本源碼,其中自帶了 Demo瓮钥,可運(yùn)行方便學(xué)習(xí)筋量。
集成的方法可以使用 cocoapods 方式集成,也可以使用 Carthage 方式集成碉熄。集成方法見官網(wǎng)說明毛甲。
pod install 安裝成功后,在需要使用的文件中加入頭文件的引用

#import <Lottie/Lottie.h>

下面??一段簡單說明了一下 Lottie 庫里用到的方法和屬性具被。可以自行看官方的Demo只损,可以忽略一姿。

在 LOTAnimationView.h 中:

//創(chuàng)建視圖的幾個方法
+ (instancetype)animationNamed:(NSString *)animationName NS_SWIFT_NAME(init(name:));
+ (instancetype)animationNamed:(NSString *)animationName inBundle:(NSBundle *)bundle NS_SWIFT_NAME(init(name:bundle:));
+ (instancetype)animationFromJSON:(NSDictionary *)animationJSON NS_SWIFT_NAME(init(json:));
- (instancetype)initWithContentsOfURL:(NSURL *)url;

//可用屬性
@property(nonatomic,readonly)BOOLisAnimationPlaying;   //是否正在動畫
@property(nonatomic,assign)BOOLloopAnimation;          //是否循環(huán)播放動畫
@property(nonatomic,assign)CGFloatanimationProgress;   //動畫執(zhí)行進(jìn)度
@property(nonatomic,assign)CGFloatanimationSpeed;      //動畫速度
@property(nonatomic,readonly)CGFloatanimationDuration; //動畫時間

//實例方法
- (void)playWithCompletion:(LOTAnimationCompletionBlock)completion;//動畫結(jié)束后可以執(zhí)行一個block
- (void)play;    //播放
- (void)pause;   //暫停
- (void)addSubview:(LOTView *)view toLayerNamed:(NSString *)layer;

#if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
@property(nonatomic) LOTViewContentMode contentMode;//非iOS的contentMode
#endif

ViewController.m
設(shè)置 present/dismiss controller 轉(zhuǎn)場動畫
在需要轉(zhuǎn)場效果的 viewcontroller 中實現(xiàn) UIViewControllerTransitioningDelegate代理中的下面兩個方法,就可以設(shè)置 controller 轉(zhuǎn)場動畫了跃惫,animationName :“vcTransition1” “vcTransition2” 就是 AE 導(dǎo)出的動畫 json 文件名叮叹。

#pragma mark -- View Controller Transitioning

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented
                                                                  presentingController:(UIViewController *)presenting
                                                                      sourceController:(UIViewController *)source {
  LOTAnimationTransitionController *animationController = [[LOTAnimationTransitionController alloc] initWithAnimationNamed:@"vcTransition1"
                                                                                                          fromLayerNamed:@"outLayer"
                                                                                                            toLayerNamed:@"inLayer"];
  return animationController;
}

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed {
  LOTAnimationTransitionController *animationController = [[LOTAnimationTransitionController alloc] initWithAnimationNamed:@"vcTransition2"
                                                                                                          fromLayerNamed:@"outLayer"
                                                                                                            toLayerNamed:@"inLayer"];
  return animationController;
}

以上代碼頭文件中提供的方法和屬性,具體見源代碼爆存◎韧纾可以具體運(yùn)行 Demo 體驗一下。


最后:

以上是對 Lottie 開源庫的初步介紹和使用集成方法介紹先较。示例是以 iOS 為例携冤。希望對有需要的朋友有所幫助。
如果要了解 windows 下安裝插件的方法以及安卓平臺集成闲勺,可以參考以下博客和文章曾棕。??

Lottie- 讓Android動畫實現(xiàn)更簡單

如何看待 Airbnb 新發(fā)布的 Lottie?

Airbnb開源動畫庫Lottie

以上菜循。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翘地,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衙耕,老刑警劉巖昧穿,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異橙喘,居然都是意外死亡时鸵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門渴杆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寥枝,“玉大人,你說我怎么就攤上這事磁奖∧野荩” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵比搭,是天一觀的道長冠跷。 經(jīng)常有香客問我,道長身诺,這世上最難降的妖魔是什么蜜托? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮霉赡,結(jié)果婚禮上橄务,老公的妹妹穿的比我還像新娘。我一直安慰自己穴亏,他們只是感情好蜂挪,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嗓化,像睡著了一般棠涮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刺覆,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天严肪,我揣著相機(jī)與錄音,去河邊找鬼谦屑。 笑死驳糯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的氢橙。 我是一名探鬼主播结窘,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼充蓝!你這毒婦竟也來了隧枫?” 一聲冷哼從身側(cè)響起喉磁,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎官脓,沒想到半個月后协怒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡卑笨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年孕暇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赤兴。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡妖滔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桶良,到底是詐尸還是另有隱情座舍,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布陨帆,位于F島的核電站曲秉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疲牵。R本人自食惡果不足惜承二,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纲爸。 院中可真熱鬧亥鸠,春花似錦、人聲如沸识啦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袁滥。三九已至,卻和暖如春灾螃,著一層夾襖步出監(jiān)牢的瞬間题翻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工腰鬼, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留嵌赠,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓熄赡,卻偏偏與公主長得像姜挺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彼硫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,070評論 25 707
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議炊豪。它實...
    香橙柚子閱讀 23,848評論 8 183
  • 回首 回首凌箕, 作別昨日。 往事如煙似夢词渤, 都走得很遠(yuǎn)很遠(yuǎn)牵舱。 生命的車輪, 已駛到現(xiàn)在缺虐, 過往的事芜壁, 在腦海逐漸淡然...
    燒火一條柴閱讀 225評論 0 1
  • 文/沒有春 01 摘一片樹葉 寫上你的名字 讓思念隨風(fēng)搖曳 02 彩云不追月 月羞了 云累了 03 思念 抱不住 ...
    沒有春閱讀 460評論 20 31
  • 第一站之天壇公園 天壇公園內(nèi)有祈年殿、圓丘壇高氮、皇穹宇等慧妄,古時帝皇孟春會到天壇祈年殿祈福一年風(fēng)調(diào)雨順國泰民安,冬至到...
    遇見白娘子她妹閱讀 130評論 0 0