можно ли совместить две анимации во фреймворке Lottie

Быстрая версия - 5, а версия Lottie - 3.1.1.

Я хочу показать два файла Json с анимацией с Lottie, таким образом, первая анимация исчезает, а после этого она исчезает, а вторая исчезает, и мне нужно взять цикл и сделать это в бесконечном цикле.

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)
            }
        }
    }

person mohsen    schedule 04.09.2019    source источник


Ответы (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()}
    }
}
person metalnodeug    schedule 04.09.2019
comment
Я хочу сделать это в цикле, как мне это сделать? - person mohsen; 04.09.2019
comment
Можете ли вы использовать repeat {}, а, может быть, ?! - person metalnodeug; 04.09.2019
comment
Я знаю, что вы младший в stackOverFlow, честно говоря, ваш ответ не имеет отношения к моему вопросу, но я голосую за вас, потому что я думаю, что это помогает вам больше почувствовать энергию для ответа в stackoverflow;) - person mohsen; 04.09.2019
comment
Извините, если у меня нет ответа на ваш вопрос. Возможно, я не понял вашу просьбу. Однако, если у вас будет циклическая анимация, вы можете увидеть это: var AnimationView.loopMode: LottieLoopMode {get set} - person metalnodeug; 04.09.2019
comment
Да, я знаю, я хочу зациклить две анимации, одну за другой, и это работает только для одной анимации. - person mohsen; 04.09.2019
comment
Хорошо, я отредактировал свой ответ. Этот код запускает одну за другой анимацию и использует обработчик завершения цикла. Вилка мне подходит. Вы можете изменить в своем проекте использование постепенного появления и исчезновения для каждого из них. - person metalnodeug; 04.09.2019
comment
Делает утечку памяти :) - person mohsen; 05.09.2019