Лучший способ запустить серию коротких анимаций? - PullRequest
1 голос
/ 08 мая 2020

У меня в основном есть песня, под которую нужно танцевать мультфильмы.

Лучше иметь:

Версия A: одна полная песня и отправка нескольких очередей:

    DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
        //Have the figure dance move 1
    }
    DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
        //Have the figure dance move 2
     }

Или сегментируйте песню и действия:

   func dancing(){
     timeElapsed += 1
     if timeElapsed == 1 {
        \\figure does move 1
        self.playSound()
     } else if timeElapsed == 2 {
        \\figure does move 2
        self.playSound2()
     }

Вкратце:

Версия a: отправка нескольких очередей одновременно

Версия b : Сегментируйте очереди, но это будет означать, что в моем проекте будет 10+ медиафайлов

Есть ли способ проверить это? Или какие-нибудь альтернативные методы? Я искал и видел такие вещи, как concurrent / syn c очереди, но не знаю, как их использовать на практике.

Ответы [ 3 ]

1 голос
/ 09 мая 2020

Если вы не хотите слишком много вложений, вы можете использовать UIViewPropertyAnimator. Например:

let animation1 = UIViewPropertyAnimator(duration: 0.5, curve: .linear) {
    // animation code
}

let animation2 = UIViewPropertyAnimator(duration: 1, curve: .linear) {
    // animation code
}

animation1.addCompletion { _ in
    animation2.startAnimation()
}

animation1.startAnimation()
0 голосов
/ 08 мая 2020

Я буду go с версией A: одна полная песня и установить иерархию анимации

Лучше использовать анимацию UIView с блоком завершения

 UIView.animate(withDuration: 0.5, animations: {
        //animation 1
    }, completion: { (value: Bool) in
        UIView.animate(withDuration: 1.0, animations: {
            //animation 2
        })
    })
0 голосов
/ 08 мая 2020

Другой вариант, который вы, возможно, захотите посмотреть, - это анимация ключевых кадров UIView. Вам нужно вычислить относительное время начала и продолжительность, но это немного лучше, чем использование очередей отправки.

Подробнее: ссылка

Простая демонстрация:

UIView.animateKeyframes(withDuration: 4.0, delay: 0.0, options: [], animations: {
    // Animation 1 that starts immediately and runs for 2 seconds
    UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.5) {
        // Perform animation
    }

    // Animation 2 that starts after 2 seconds and runs for 2 seconds
    UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5) {
        // Perform animation
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...