Lottie初級教程:打造iOS APP完美動畫

好的APP用戶界面動畫如果通過精準的設計就能極大地提升用戶體驗。這也常常是區(qū)分APP優(yōu)秀與否的一個重要標準官套。實現(xiàn)與設計一個有意義且實用的動畫是同樣困難的,尤其是當動畫或者視圖切換非常復雜時记焊,對iOS開發(fā)者來說是很難將這個動畫在APP中實現(xiàn)的芳杏。

假設你不是一個獨立開發(fā)者豫领,而是在一個開發(fā)者或者UI/UX的設計師團隊抡柿。有多少次設計師向你展示一個很好很酷的動畫并希望能置入應用時,你也覺得這個動畫很好很漂亮啊等恐,但是卻真的很難而且程序也非常長洲劣。

但有了Airbnb開發(fā)的Lottie,開發(fā)者就可以免去寫一行一行的代碼而非常容易地渲染動畫了课蔬。你可以直接把 Adobe After Effects的動畫用在你的Xcode 項目中囱稽。這真的非常實用并且還能把你實現(xiàn)動畫的大量時間節(jié)省下來。

在這個教程中二跋,我將向你展示如下:

什么是Lottie战惊?

你可以從哪兒獲取Lottie動畫文件?

在你的iOS項目中你可以如何使用它扎即?

什么是Lottie吞获?

首先要說的是:什么是Lottie呢?由Airbnb開發(fā)的Lottie是一個將After Effects動畫提供給任意一個iOS谚鄙,macOS各拷,Android還有React Native原生APP的文件庫。這些動畫通過一個叫Bodymovin的開源After Effects插件闷营,以JSON文件的形式進行輸出烤黍。Lottie通過JSON格式下載動畫數(shù)據(jù)并實時提供給開發(fā)者。

換句話說傻盟,你也可以通過設計器直接把JSON文件放入Xcode project速蕊,讓Lottie幫你下載動畫。當然別誤會,你還是需要為你的動畫寫一些代碼,但是你會發(fā)現(xiàn)Lottie的確將為你的動畫編碼節(jié)省大量的時間。

Lottie現(xiàn)在不僅在GitHub上已經(jīng)開源,而且還提供一個示例項目和一系列的示例動畫吨铸,看看下面有沒有你能用在iOS Apps當中示例動畫吧。

Lottie 動畫文件

在使用Lottie之前枫弟,你需要一個以JSON文件形式輸出的動畫數(shù)據(jù)庫阳掐。如果你已經(jīng)有了一個After Effects動畫,用Bodymovin插件來創(chuàng)建JSON文件武福。

如果你不會使用After Effects呢议双?你要如何準備你的動畫?你可以雇一位設計師為你設計動畫捉片,或者你學會用After Effects平痰。

幸運的是汞舱,這里還有一個選項,那就是:Lottie Files

Lottie Files是一個擁有高質(zhì)量Lottie文件格式動畫的網(wǎng)站宗雇。在這個網(wǎng)站昂芜,不僅設計師可以在上面陳列他們的動畫而且還提供免費下載。像我一樣沒有After Effects使用經(jīng)驗的人一定會覺得這個動畫庫非常好用赔蒲!

在Xcode中使用Lottie

如果你已經(jīng)有了一個動畫文件泌神,剩下的就是準備好Xcode project。和iOS庫相似地舞虱,最容易的方法就是用CocoaPods將Lottie放入Xcode 項目中欢际。

讓我們來做個演示看看Lottie是怎樣工作的。

首先矾兜,啟動Xcode并用Single View Application范本創(chuàng)建一個新項目损趋,把新項目命名為LottieDemo(或任意你喜歡的名字)并保存。

用CocoaPods安裝Lottie動畫庫

當你創(chuàng)建完項目椅寺,離開Xcode浑槽,打開Terminal。我們將為安裝Lottie動畫庫創(chuàng)建一個Podfile返帕。我想你應該已經(jīng)有一些使用CocoaPods的經(jīng)驗并且已經(jīng)把它安裝在你的電腦中了括荡。

在terminal中運行下列指令來創(chuàng)建一個Podfile。

pod?init

然后打開文件像這樣編輯:

target?'LottieDemo'?do

#?Comment?the?next?line?if?you're?not?using?Swift?and?don't?want?to?use?dynamic?frameworks

use_frameworks!

#?Pods?for?LottieDemo

pod?'lottie-ios'

end

我們只加一行pod 'lottie-ios'來指出這是這個項目需要的pod溉旋。然后回Terminal運行下列指令:

pod?install

CocoaPods會下載Lottie動畫庫并在Xcode項目中打包畸冲。打包結束后你會發(fā)現(xiàn)出現(xiàn)一個叫LottieDemo.xcworkspace.的新項目文件。在Xcode中打開這個文件并開始進行編碼观腊。

添加Animation JSON Files

如果你用自己的動畫文件對Lottie進行測試最好邑闲,但沒有也沒關系,從lottiefiles.com下載這個JSON格式的免費文件梧油,我們將用這個文件做個快速的演示苫耸。

現(xiàn)在把JSON文件?(servishero_loading.json)拖入Xcode項目的工程管理器,把它放入LottieDemo小組儡陨。

創(chuàng)建多動畫視圖

現(xiàn)在來到有趣的部分了褪子,你將用不到10行代碼就能執(zhí)行這個示例動畫。

打開ViewController.swift骗村,然后加入一行代碼將Lottie 動畫庫輸入進去:

import?Lottie

接下來更新viewDidLoad()如下:

override?func?viewDidLoad()?{

super.viewDidLoad()

if?let?animationView?=?LOTAnimationView(name:?"servishero_loading")?{

animationView.frame?=?CGRect(x:?0,?y:?0,?width:?400,?height:?400)

animationView.center?=?self.view.center

animationView.contentMode?=?.scaleAspectFill

view.addSubview(animationView)

animationView.play()

}

}

上面就是你播放動畫需要的代碼嫌褪。在Lottie中有個LOTAnimationView分類可以直接從JSON文件下載動畫數(shù)據(jù)。你要先用你已經(jīng)下載好的JSON文件創(chuàng)建一個LOTAnimationView對象胚股,你才能展示這個動畫笼痛。

LOTAnimationView是UIView的一個子分類,所以你只要像執(zhí)行其他視圖一樣執(zhí)行LOTAnimationView就可以了。我們先將它的大小重置缨伊,放在中心位置摘刑,把內(nèi)容模式設為Aspect Fill;然后我們調(diào)用addSubview把動畫視圖添加到主視圖刻坊;最后枷恕,我們調(diào)用play()播放動畫。

現(xiàn)在我們運行項目看看APP的效果是什么樣谭胚。只要打開APP徐块,它就會實時播放動畫。

循環(huán)動畫

默認情況下漏益,動畫只播放一次蛹锰。如果你想循環(huán)播放動畫,你可以把loopAnimation屬性設為true如下:

animationView.loopAnimation?=?true

LOTAnimationView分類也為你自定義動畫提供了大量屬性绰疤。如果你想放慢動畫播放速度铜犬,只要像下面這樣改變animationSpeed屬性就行了:

animationView.animationSpeed?=?0.5

從遠程服務器上載入Animation JSON File

你不僅可以把JSON文件保存在本地,而且可以把動畫數(shù)據(jù)保存在遠程服務器上轻庆。Lottie已經(jīng)為開發(fā)者從遠程URL上下載JSON文件準備好了API癣猾。用下面的代碼替換animationView的初始化界面,看看你會得到什么樣的動畫余爆。

let?animationView?=?LOTAnimationView(contentsOf:?URL(string:?"https://github.com/airbnb/lottie-ios/raw/master/Example/Assets/PinJump.json")!)

動畫視圖轉(zhuǎn)換

LOTAnimationView和UIView一樣都支持不同類型的動畫轉(zhuǎn)換纷宇。你可以通過合理地設置轉(zhuǎn)換屬性對動畫進行旋轉(zhuǎn),大小重置蛾方,位置重置像捶。下面是一個把動畫順時針轉(zhuǎn)換45度的轉(zhuǎn)換示例:

let?rotateTransform?=?CGAffineTransform(rotationAngle:?45.0)

animationView.transform?=?rotateTransform

相似的,你可以像其他標準UIView對象一樣把UIView動畫覆蓋在原來的動畫上桩砰。我們在現(xiàn)有的動畫上重建一不同大小的動畫拓春。用下面的代碼把viewDidLoad()替換掉:

override?func?viewDidLoad()?{

super.viewDidLoad()

if?let?animationView?=?LOTAnimationView(name:?"servishero_loading")?{

animationView.frame?=?CGRect(x:?0,?y:?0,?width:?400,?height:?400)

animationView.center?=?self.view.center

animationView.loopAnimation?=?true

animationView.contentMode?=?.scaleAspectFill

animationView.animationSpeed?=?0.5

//?Applying?UIView?animation

let?minimizeTransform?=?CGAffineTransform(scaleX:?0.1,?y:?0.1)

animationView.transform?=?minimizeTransform

UIView.animate(withDuration:?3.0,?delay:?0.0,?options:?[.repeat,?.autoreverse],?animations:?{

animationView.transform?=?CGAffineTransform.identity

},?completion:?nil)

view.addSubview(animationView)

animationView.play()

}

}

運行APP你就會得到下面的結果,是不是很有趣呢亚隅?

接下來呢硼莽?

好的UI動畫不僅能使你的應用上一個層次,而且能提供動人的用戶體驗煮纵。在Lottie出現(xiàn)之前懂鸵,用After Effects來真正地實現(xiàn)動畫的確是非常艱難又耗時的工作。但現(xiàn)在有了這個強大的動畫庫將使得動畫實現(xiàn)變得無比輕松行疏。

在這個教程中匆光,你應該已經(jīng)學會了如何使Lottie服務于你的iOS項目。我在這兒只是大概介紹了一下Lottie的要點隘擎,你可以在GitHub上了解更多關于Lottie的信息殴穴。不僅如此,我們在下期教程將通過建立一個炒雞棒的管理動畫對Lottie進行更加深入的探討货葬。

保持關注哦采幌。如果你喜歡這個教程,請在下方留言或分享給你的朋友震桶。

你可以在GitHub上下載這個簡單的Xcode項目以供參考休傍。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹲姐,隨后出現(xiàn)的幾起案子磨取,更是在濱河造成了極大的恐慌,老刑警劉巖柴墩,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忙厌,死亡現(xiàn)場離奇詭異,居然都是意外死亡江咳,警方通過查閱死者的電腦和手機逢净,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歼指,“玉大人爹土,你說我怎么就攤上這事〔壬恚” “怎么了胀茵?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挟阻。 經(jīng)常有香客問我琼娘,道長,這世上最難降的妖魔是什么附鸽? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任脱拼,我火速辦了婚禮,結果婚禮上拒炎,老公的妹妹穿的比我還像新娘挪拟。我一直安慰自己,他們只是感情好击你,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布玉组。 她就那樣靜靜地躺著,像睡著了一般丁侄。 火紅的嫁衣襯著肌膚如雪惯雳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天鸿摇,我揣著相機與錄音石景,去河邊找鬼。 笑死,一個胖子當著我的面吹牛潮孽,可吹牛的內(nèi)容都是我干的揪荣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼往史,長吁一口氣:“原來是場噩夢啊……” “哼仗颈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起椎例,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤挨决,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后订歪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脖祈,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年刷晋,在試婚紗的時候發(fā)現(xiàn)自己被綠了盖高。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡掏秩,死狀恐怖或舞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒙幻,我是刑警寧澤映凳,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站邮破,受9級特大地震影響诈豌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抒和,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一矫渔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摧莽,春花似錦庙洼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至征懈,卻和暖如春石咬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卖哎。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工鬼悠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留删性,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓焕窝,卻偏偏與公主長得像蹬挺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子袜啃,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

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