Прекратить и перезапустить анимацию, если выполняется снова, пока все еще продолжается - PullRequest
0 голосов
/ 21 июня 2020

У меня есть кнопка, которая анимирует текст метки (Hello World!) В стиле пишущей машинки каждый раз, когда я ее нажимаю. Если я нажму кнопку во время выполнения анимации, текст снова распечатается в текущей точке анимации, в результате получится что-то вроде этого:

HellHello World! O World!

Я использую расширение, поэтому не могу добавлять переменные и не знаю, как выполнить анимацию без расширения UILabel. Каким будет самый простой способ исправить это?

@IBAction func buttonClicked(_ sender: Any) {
    self.label.animate(newText: label.text ?? "Hello World!", characterDelay: 0.05)
}

extension UILabel {
    func animate(newText: String, characterDelay: TimeInterval) {
        DispatchQueue.main.async {
            self.text = ""
            for (index, character) in newText.enumerated() {
                DispatchQueue.main.asyncAfter(deadline: .now() + characterDelay * Double(index)) {
                    self.text?.append(character)
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...