能否在Lottie框架中组合两个动画

时间:2019-09-04 06:58:28

标签: ios swift xcode animation lottie

快速版本为5,抽奖版本为3.1.1

我想显示两个带有Lottie的动画Json文件,以这种方式在第一个动画中淡出,并且在它淡出后又淡出另一个,然后我必须循环并在无限循环中执行。

boardAnimationViewForSecondSlide = AnimationView(frame: CGRect(x: 0, y: 0, width: frame.width, height: frame.width * (690 / 750)))
boardAnimationViewForSecondSlide?.animation = Animation.named("Slidetwop1")
slide.addSubview(boardAnimationViewForSecondSlide)

我定义了句柄补全播放方法的闭包

private var animationState: Int = 0 // 0 first slid, 1 second slide
private var changeStateInSlide2: (Bool) -> Void = { finish in
   if animationState == 0 {
        boardAnimationViewForSecondSlide.animation =  Animation.named("Slidetwop2.json")
        playSecondPage = true
   } else {
         boardAnimationViewForSecondSlide.animation =  Animation.named("Slidetwop1.json")
         playSecondPage = true
    }
}


fileprivate var playSecondPage: Bool {
        get {
            return false
        }
        set {
            if newValue {
               boardAnimationViewForSecondSlide.play(completion:changeStateInSlide2)
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是创建一个功能来启动动画。

示例:

/// Start animation with Lottie
    func startAnimation(viewName: AnimationView, jsonName: String) {
        viewName.isHidden = false
        viewName.animation = Animation.named(jsonName)
        viewName.play { (_) in
            viewName.isHidden = true
        }

此后,您可以简单地一个接一个地调用方法:

startAnimation(viewName: checkAnimation, jsonName: "Slidetwop1")
startAnimation(viewName: checkAnimation, jsonName: "Slidetwop2")

或者使用完成处理程序来调用第二个。

编辑:对于循环,您可以使用以下解决方案:

/// Start animation with Lottie
func startAnimation() {
    animationLottieView.animation = Animation.named("Slidetwop1")
    animationLottieView.play { (finished) in
        // completion handler
        self.animationLottieView.animation = Animation.named("Slidetwop2")
        self.animationLottieView.play { (finishedAnimation) in
            self.startAnimation()}
    }
}