适用于iOS的Lottie,如何播放和自动反向一次?

时间:2019-07-10 11:00:04

标签: ios swift lottie lottie-ios

我目前正在尝试使用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)选项。有谁知道如何使它工作?

2 个答案:

答案 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)")

        }

    }