AnimateKeyframes запускает все ключевые кадры одновременно (Swift) - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь анимировать метку, чтобы изменить ее текст с разными словами на разных ключевых кадрах, но она просто переходит на последний ключевой кадр («Спокойной ночи») без отображения предыдущих.Он распечатывает их, так что я думаю, что-то не так с продолжительностью или startTime, но я не могу понять, что это может быть ..

func changeText() {

    let options = UIView.KeyframeAnimationOptions.calculationModeLinear

    UIView.animateKeyframes(withDuration: 10, delay: 0, options: options, animations: {

        UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.25, animations: {
            self.label.text = "Good Morning"
            print("Morning")
        })

        UIView.addKeyframe(withRelativeStartTime: 0.25, relativeDuration: 0.25, animations: {
            self.label.text = "Good Afternoon"
            print("Afternoon")
        })

        UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.25, animations: {
            self.label.text = "Good Evening"
            print("Evening")
        })
        UIView.addKeyframe(withRelativeStartTime: 0.75, relativeDuration: 0.25, animations: {
            self.label.text = "Good Night"
            print("Night")
        })

    }, completion: nil)
}

@IBAction func didPressBtn(_ sender: Any) {
    changeText()
}

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Я не верю, что изменение текста UILabel напрямую анимируется в UIView.animate.

Возможное решение о том, как вы хотите, чтобы это работало, состояло бы в создании четырех разных UILabel и анимации.между ними при необходимости.

Доступны сторонние библиотеки!https://github.com/lexrus/LTMorphingLabel (найдено через https://github.com/ameizi/awesome-ios-animation)

0 голосов
/ 17 апреля 2019

Это должно достичь того, что вы после?

 func changeText() {

 label.text = "Good Morning"
 print("Morning")
 sleep(2.5)

 label.text = "Good Afternoon"
 print("Morning")
 sleep(2.5)

 label.text = "Good Evening"
 print("Morning")
 sleep(2.5)

 label.text = "Good Night"
 print("Morning")
 sleep(2.5)

 }
...