Lottie動畫教程

火之玉發表於2019-03-01

原文: www.jianshu.com/p/83f6a228b…

為了提升使用者體驗, 在介面中加入一個設計良好的介面動畫成為app設計的潮流. 之前聽有人說過專業的介面動畫是要有設計師、工程師、程式設計師、平面動畫師等組成, 想想這是一個多大的任務量啊. 而且裡面的各種邏輯處理, 複雜一些的動畫, 一般人幾乎是望其項背;

但有了Lottie之後, 就大大降低了開發者的難度. 我們可以直接把Lottie的動畫檔案匯入, 設定一下引數, 就可以使用這個動畫了. 為了滿足大家的好奇心, 先附幾個簡單的例項:

Lottie簡單例項
Lottie簡單例項

一. 初識Lottie

通過AE上的Bodymovin外掛將AE中製作好的動畫匯出成一個json檔案,Lottie實現了iOS/macOS/Android/React Native三個平臺對該json檔案的解析和渲染。

所有這些動畫都是在After Effects中建立的,使用Bodymovin匯出,並且無需額外的工程師工作即可完成原生渲染。

Bodymovin是一個又Hernan Torrisi建立的After Effects外掛,匯出檔案格式為json和包括一個javascript網路播放器。而它最大的優點是提供了一套完整的跨平臺動畫實現工作流;

從程式碼上看,iOS端是基於layer,而最終都是對canvas的操作,中間除去解析json外,基本無耗費效能的行為。

當然也不可能都那麼完美, 畢竟開源不久, 它仍然存在以下問題:

  1. Bodymovin外掛待完善,仍然有部分AE效果無法成功匯出;
  2. Lottie對json檔案的支援待完善,目前有部分能成功匯出成json檔案的效果在移動端上無法很好的展現;
  3. 目前不支援文字,所有文字必須轉成向量圖才能正常展現動畫;
  4. 動畫無法被編輯,即移動端無法更改遠端下載到本地的動畫;
  5. 文件更新不及時等;
    注:
    iOS需要iOS8及以上, 安卓需要API14及以上;

二. 如何用Bodymovin外掛製作動畫

iTerryWang在他的簡書部落格裡詳細介紹瞭如何使用Bodymovin外掛製作動畫, 我就不多說了, 也同時感謝一下iTerryWang的分享;
Lottie簡介 & iOS整合使用

三. 如何使用Lottie

1. 下載Lottie動畫檔案
除了用Bodymovin外掛建立動畫外, 我們還可以在Lottie Files下載;

Lottie Files是一個擁有高質量Lottie檔案格式動畫的網站。在這個網站,不僅設計師可以在上面陳列他們的動畫而且還提供免費下載. 這步結束後, 我們就準備好了動畫所需的JSON檔案;

2. 新建工程
新建一個工程, 命名為LottieTest;

3. 匯入Lottie動畫庫
用CocoaPods安裝Lottie動畫庫:
在終端進行如下操作:
①進入檔案目錄(檔案目錄要用自己的工程目錄);

cd /Users/apple/Desktop/LottieTest複製程式碼

②建立podfile

pod init複製程式碼

③開啟檔案編輯

target `LottieTest` do
  pod `lottie-ios`
end複製程式碼

④匯入Lottie專案

pod install複製程式碼

4. 新增Lottie動畫的JSON檔案
之前已經準備好這個檔案了, 匯入工程就行;

5. 建立動畫
OC版:

#import "ViewController.h"
#import <Lottie/Lottie.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    LOTAnimationView *lottieTest = [LOTAnimationView animationNamed:@"servishero_loading"];
    lottieTest.contentMode = LOTViewContentModeScaleAspectFill;
    lottieTest.frame = self.view.bounds;
    lottieTest.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
    [self.view addSubview:lottieTest];
    [lottieTest play];
}

@end複製程式碼

swift版:

import UIKit
import Lottie

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        if let animationView = LOTAnimationView(name: "servishero_loading") {
//        if let animationView = LOTAnimationView(contentsOf: URL(string: "https://github.com/airbnb/lottie-ios/raw/master/Example/Assets/LottieLogo1.json")!) {
            animationView.frame = self.view.bounds
            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()
        }

    }
}複製程式碼

至於android, reactNative參照下方github地址:
android
reactNative

擴充套件:
Airbnb 動畫庫Lottie

相關文章