首页 > 解决方案 > 如果仍在进行中再次执行,则终止并重新启动动画

问题描述

我有一个按钮,每次按下它都会以打字机风格为标签的文本(Hello World!)设置动画。如果我在动画仍在进行时按下按钮,则文本会在动画的当前点再次打印,从而产生如下内容:

地狱Hello World!o 世界!

我正在使用扩展,所以我无法添加变量,我不确定如何在没有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)
                }
            }
        }
    }
}

标签: iosswift

解决方案


推荐阅读