LoginSignup
2
2

More than 3 years have passed since last update.

lottie-iosを使って、アニメーションレイヤーにサブビューを追加する

Posted at

Lottieとは

Lottieは言わずと知れたアニメーションライブラリで、数行のコードでリッチなアニメーションを実装できます。

Lottieファイルと言われる、Adobe After Effectsから生成されたJSONファイルを、読み込み、アニメーションを表示させるためのライブラリです。

いわゆるビデオプレイヤー的な役割をするもので、Lottieファイルを読み込ませると、様々なリッチアニメーション実現できます。

導入

今回はcocoapodを使用します。Podfileに以下ラインを追加し、pod installを実行

pod 'lottie-ios'

Lottieファイルをダウンロード

こちらより、好きなファイルを落としてください。今回のデモではスケボーにいさんを使います。

Screen Shot 2020-12-13 at 1.08.47.png

基本実装

まずは先ほどDLしたLottieファイルをプロジェクトに取り込んでください。

のちに、ViewController.swiftに以下コードを追加ます。

import UIKit
import Lottie

class ViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()

    // play lottie file
    let animationView = AnimationView(name: "41256-skateboarding")
    animationView.frame = view.bounds
    animationView.loopMode = .loop
    animationView.contentMode = .scaleAspectFit
    view.addSubview(animationView)
    animationView.play()
  }
}

lottie-ios-simulator.gif

レイヤーにサブビューを追加する

Lottieの凄いところは、ただアニメーションを再生するだけでなく、指定のアニメーションレイヤーにサブビューも追加できると言うところです。ドキュメント

Lottieアニメーションは複数のアニメーションレイヤーからなり、それぞれのレイヤーが動くことで、リッチアニメーションを実現しています。そのレイヤーにサブビューを追加することで、サブビューをレイヤーの一部としてをアニメーションさせてることができます。

Lottie Editorで、先ほどDLしたファイルを読み込んでみましょう。

lottie-editor.png

左側に見えるのがレイヤーです。実装段階でレイヤー名が必要になります。

実装

今回は、スケボー兄さんの顔を置き換えてみましょう。ドキュメントにある通り、どのレイヤーにサブビューを追加するかを決めないといけません。今回は顔を置き換えるということで、レイヤー “head” にサブビューを追加します。

import UIKit
import Lottie

class ViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()

    // play lottie file
    let animationView = AnimationView(name: "41256-skateboarding")
    animationView.frame = view.bounds
    animationView.loopMode = .loop
    animationView.contentMode = .scaleAspectFit
    view.addSubview(animationView)

    // add label to replace face
    let path = AnimationKeypath(keypath: "head")
    let faceSubview = AnimationSubview()
    let faceLabel = UILabel()
    faceLabel.backgroundColor = .white
    faceLabel.frame = CGRect(x: -50, y: -450, width: 200, height: 200)
    faceLabel.text = "(゚ω゚)"
    faceLabel.textAlignment = .center
    faceLabel.layer.cornerRadius = 100
    faceLabel.clipsToBounds = true
    faceLabel.font = UIFont.boldSystemFont(ofSize: 60)
    faceSubview.addSubview(faceLabel)
    animationView.addSubview(faceSubview, forLayerAt: path)

    animationView.play()
  }
}

lottie-replace-face.gif

見事に顔が置き換えられ、動きに合わせ、新しい顔の位置、角度まで変わっていますね!

「x, y座標が固定になってるけど、アニメーションのフレームサイズ変われば顔の位置ずれるのでは?」と思った方もいると思います。

僕もそこは気になっていたのですが、その心配はありませんでした。どのフレームサイズでも、顔の位置がずれることはありませんでした。

ユーザーのプロフィール画像を組み込んだアニメーションを作ったり、いろいろなことに応用できると思います。

最後に

Lottieに関してこちらでもう少し詳しくかいたので、興味ある方は覗いてみてくれると嬉しいです。

Happy Coding!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2