LottieUI allows you to use delightful Lottie animations with SwiftUI without having to give up on the familiar declarative API or the powerful customization settings from the animation framework
☑️ Requirements
iOS 13.0 or later
macOS Catalina 10.15 or later NEW (Requires LottieUI 1.1 or later)
🧑💻 Usage
To display an animation from a local Lottie JSON file, use the LottieView component:
LottieView("MyAnimation")
If your JSON is stored on another bundle outside your project’s, you can specify the Bundle to load the animation from or provide a file path where the animation file is located:
// Loads an animation from the provided bundle
LottieView("MyAnimation", bundle: DesignSystem.Bundle.main)
// Loads an animation file from the provided path
LottieView(path: "/path/to/animation.json")
🛰 Remote animations
For remote animations, LottieUI provides AsyncLottieView, which attemps to download an animation from a remote URL and present it if successful. You can also provide views to be displayed while the donwload is in progress or if the download fails:
let url = URL(string: "https://assets3.lottiefiles.com/packages/lf20_hbdelex6.json")!
AsyncLottieView(url: url) { phase in
switch phase {
case .loading:
ProgressView()
case .error:
ErrorView
case .success(let lottieView):
lottieView
}
}
🚀 Features
LottieView allows you to take control of your animations with a set of modifiers that can be applied to a LottieView:
⏯ Playback
By default, your animation will start playing automatically. To control whether the animation should be playing, use the .play(_:) modifier:
struct ContentView: View {
@State var isPlaying: Bool = true
var body: some View {
LottieView("MyAnimation")
.play(isPlaying)
}
}
🔁 Loop Mode
To setup the Loop Mode for your animation, use .loopMode(_:)
struct ContentView: View {
var body: some View {
LottieView("MyAnimation")
.loopMode(.loop)
}
}
🖼 Current Frame and Progress
To observe the current frame being displayed in the animation and perform an action based on it, use .onFrame(_:)
Warning
To make use of the Frame/Progress observers, the animation must be using the .mainThread rendering engine. This can be set by using the .renderingEngine(_:) method
struct ContentView: View {
var body: some View {
LottieView("MyAnimation")
.renderingEngine(.mainThread)
.onFrame { _ in
// Perform action based on current frame
}
}
}
To observe the progress instead, use .onProgress(_:):
struct ContentView: View {
var body: some View {
LottieView("MyAnimation")
.renderingEngine(.mainThread)
.onProgress { _ in
// Perform action based on current progress
}
}
}
🏃 Speed
To set the speed of an animation, use .speed(_:):
struct ContentView: View {
var body: some View {
LottieView("MyAnimation")
.speed(2.0)
}
}
Rendering Engine
LottieUI also supports the new RenderingEngine introduced in Lottie 3.4.0, which can greatly reduce CPU usage when displaying compatible animations
By default, LottieUI uses the .automatic, which will automatically apply the new rendering engine if an animation is compatible, but you can override it with the .renderingEngine(_:) modifier:
LottieUI
LottieUI allows you to use delightful Lottie animations with SwiftUI without having to give up on the familiar declarative API or the powerful customization settings from the animation framework
☑️ Requirements
🧑💻 Usage
To display an animation from a local Lottie JSON file, use the
LottieView
component:If your JSON is stored on another bundle outside your project’s, you can specify the Bundle to load the animation from or provide a file path where the animation file is located:
🛰 Remote animations
For remote animations, LottieUI provides AsyncLottieView, which attemps to download an animation from a remote URL and present it if successful. You can also provide views to be displayed while the donwload is in progress or if the download fails:
🚀 Features
LottieView allows you to take control of your animations with a set of modifiers that can be applied to a LottieView:
⏯ Playback
By default, your animation will start playing automatically. To control whether the animation should be playing, use the
.play(_:)
modifier:🔁 Loop Mode
To setup the Loop Mode for your animation, use
.loopMode(_:)
🖼 Current Frame and Progress
To observe the current frame being displayed in the animation and perform an action based on it, use
.onFrame(_:)
To observe the progress instead, use
.onProgress(_:)
:🏃 Speed
To set the speed of an animation, use
.speed(_:)
:Rendering Engine
LottieUI also supports the new RenderingEngine introduced in Lottie 3.4.0, which can greatly reduce CPU usage when displaying compatible animations
By default, LottieUI uses the
.automatic
, which will automatically apply the new rendering engine if an animation is compatible, but you can override it with the.renderingEngine(_:)
modifier:There are many other options available such as:
.play(fromFrame:to:)
.backgroundBehavior(_:)
.valueProvider(_: keypath:)
For more information check the included documentation in each public component and modifier
🛠 Installation
Swift Package Manager
In your project’s
Package.swift
file, addLottieUI
as a dependency: