如果仍在执行中则再次执行动画,请终止并重新启动动画

时间:2020-06-21 13:29:02

标签: ios swift

我有一个Button,每次按下该按钮时,它都会以打字机样式为Label的文本(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)
                }
            }
        }
    }
}

0 个答案:

没有答案