我目前正在尝试使用Lottie框架向我的应用添加动画。我的代码如下:
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .lightGray
let starAnimationView = AnimationView()
// The JSON file
let starAnimation = Animation.named("qz-checklist-eve")
starAnimationView.animation = starAnimation
starAnimationView.frame = CGRect(x: 0, y: 0, width: 400, height: 400)
starAnimationView.center = self.view.center
starAnimationView.contentMode = .scaleAspectFill
view.addSubview(starAnimationView)
starAnimationView.loopMode = .autoReverse
starAnimationView.play()
}
这有效,但是动画不断循环播放。我似乎找不到如何将其设置为单个动画的方法。我检查了Lottie文档,上面写着:
var AnimationView.loopMode: LottieLoopMode { get set }
设置
play
调用的循环行为。默认值为playOnce
选项:: playOnce :动画播放一次然后停止。 :循环:动画将从头到尾循环播放直到停止。 : autoReverse :动画将向前播放,然后向后播放并循环播放直到停止。 : repeat(amount)(重复(数量)):动画将从结束到开始循环播放,直至达到一定次数。 : repeatBackwards(amount):动画将向前播放,然后向后播放一定次数。 #
不是有一个.repeatBackwards(amount)
选项。有谁知道如何使它工作?
答案 0 :(得分:1)
为了使动画仅运行一次,您所需要做的就是删除引用循环的行(starAnimationView.loopMode = .autoReverse)。 您的代码是完美的,只剩下那一行。希望我有所帮助
答案 1 :(得分:0)
这对我有用:
//play animation in full reverse
animationView.play(fromFrame: lastFrame, toFrame: 1.0, loopMode: .playOnce) { finished in ... }
要得到最后一帧,需要正常运行,完成后抓拍:
animationView.loopMode = .playOnce
animationView.play { finished in
if finished {
let lastFrame = animationView.currentFrame
print("Last frame is: \(animationView.currentFrame)")
}
}