У меня есть кнопка, которая анимирует текст метки (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)
}
}
}
}
}