lottie-iosを使って、アニメーションレイヤーにサブビューを追加する
Lottieとは
Lottieは言わずと知れたアニメーションライブラリで、数行のコードでリッチなアニメーションを実装できます。
Lottieファイルと言われる、Adobe After Effectsから生成されたJSONファイルを、読み込み、アニメーションを表示させるためのライブラリです。
いわゆるビデオプレイヤー的な役割をするもので、Lottieファイルを読み込ませると、様々なリッチアニメーション実現できます。
導入
今回はcocoapodを使用します。Podfileに以下ラインを追加し、pod install
を実行
pod 'lottie-ios'
Lottieファイルをダウンロード
こちらより、好きなファイルを落としてください。今回のデモではスケボーにいさんを使います。
基本実装
まずは先ほど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の凄いところは、ただアニメーションを再生するだけでなく、指定のアニメーションレイヤーにサブビューも追加できると言うところです。ドキュメント
Lottieアニメーションは複数のアニメーションレイヤーからなり、それぞれのレイヤーが動くことで、リッチアニメーションを実現しています。そのレイヤーにサブビューを追加することで、サブビューをレイヤーの一部としてをアニメーションさせてることができます。
Lottie Editorで、先ほどDLしたファイルを読み込んでみましょう。
左側に見えるのがレイヤーです。実装段階でレイヤー名が必要になります。
実装
今回は、スケボー兄さんの顔を置き換えてみましょう。ドキュメントにある通り、どのレイヤーにサブビューを追加するかを決めないといけません。今回は顔を置き換えるということで、レイヤー “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()
}
}
見事に顔が置き換えられ、動きに合わせ、新しい顔の位置、角度まで変わっていますね!
「x, y座標が固定になってるけど、アニメーションのフレームサイズ変われば顔の位置ずれるのでは?」と思った方もいると思います。
僕もそこは気になっていたのですが、その心配はありませんでした。どのフレームサイズでも、顔の位置がずれることはありませんでした。
ユーザーのプロフィール画像を組み込んだアニメーションを作ったり、いろいろなことに応用できると思います。
最後に
Lottieに関してこちらでもう少し詳しくかいたので、興味ある方は覗いてみてくれると嬉しいです。
Happy Coding!
Author And Source
この問題について(lottie-iosを使って、アニメーションレイヤーにサブビューを追加する), 我々は、より多くの情報をここで見つけました https://qiita.com/wataru-m/items/4e7270f024f7a6c3ed50著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .