SwiftUI에서 Lottie를 사용하여 풍부한 애니메이션을 쉽게 실현해보세요
Lottie에 관한 설명은 여러가지 기사에서도 되고 있으므로 여기서는 언급하지 말고, SwiftUI상에서의 이용 방법에 대해 봐 간다.
설치
설치 방법은 SwiftUI를 사용한다고 해서 특별히 변하지 않는다. GitHub 설명에 따른다. CocoaPods를 이용하는 경우는, Podfile에 이하를 추가해
pod install
를 터미널로 부르는 것만. 코드내에서 import Lottie
라고 하면 Lottie가 이용 가능하게 된다.# Podfile
pod 'lottie-ios'
코드
다음과 같은 파일을 만든다.
// LottieView.swift
import SwiftUI
import Lottie
struct LottieView: UIViewRepresentable {
private let tag = 100 // 必要があれば変えてください
var name: String
var loopMode: LottieLoopMode = .playOnce
var animationView = AnimationView()
@Binding var playing: Bool
func makeUIView(context: UIViewRepresentableContext<LottieView>) -> UIView {
let view = UIView(frame: .zero)
animationView.tag = tag
animationView.animation = Animation.named(name)
animationView.contentMode = .scaleAspectFit
animationView.loopMode = loopMode
animationView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(animationView)
NSLayoutConstraint.activate([
animationView.heightAnchor.constraint(equalTo: view.heightAnchor),
animationView.widthAnchor.constraint(equalTo: view.widthAnchor)
])
return view
}
func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<LottieView>) {
if playing {
(uiView.viewWithTag(tag) as! AnimationView).play()
} else {
(uiView.viewWithTag(tag) as! AnimationView).stop()
}
}
}
사용법은 다음과 같은 느낌. 로딩 뷰와 같은 컴퍼넌트라고 표시중은 항상 재생을 하고 싶으므로,
loopMode
에는 .loop
를, playing
에는 .constant(true)
를 건네준다. name
에 애니메이션 JSON 파일의 이름을 전달합니다.struct LoadingView: View {
var body: some View {
LottieView(name: "loading", loopMode: .loop, playing: .constant(true)).frame(width: 250, height: 250)
}
}
struct SomeView: View {
@State var loading: Bool
var body: some View {
ZStack {
// メインのビュー
Text("Contents")
// loadingがtrueの時のみLoadingViewを表示
if loading {
LoadingView()
}
}
}
}
한편, 사용자의 상호 작용에 따라 재생 상태를 변경하고자하는 경우는 다음과 같다.
struct PlayerView: View {
@Binding var playing: Bool
var body: some View {
LottieView(name: "player", loopMode: .loop, playing: playing).frame(width: 250, height: 250)
}
}
struct SomeView: View {
@State var playing: Bool
var buttonImage: String {
playing ? "ic_playing" : "ic_play"
}
var body: some View {
ZStack {
PlayerView(playing: $playing)
Button(action: { playing.toggle() }) {
Image(buttonImage)
}
}
}
}
요약
Lottie가 있으면 애니메이션 주위는 엔지니어로서는 즐길 수 있기 때문에 매우 편리한 툴. SwiftUI에서도 도입할 수 있어 매우 좋다.
Reference
이 문제에 관하여(SwiftUI에서 Lottie를 사용하여 풍부한 애니메이션을 쉽게 실현해보세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ngo275/items/f2c5ce68da550fdf870f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)