我有一个用Swift编写的IOS应用程序。我想在按下按钮时从主线程更改变量,并希望在函数内使用相同的变量来跳过NSThread.sleepForTimeInterval()调用。
主要课程中的原始功能:
func setTextWithAnimation(myLabel: UILabel, typedText: String, characterInterval: NSTimeInterval = 0.05){
myLabel.text = ""
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) {
for character in Array(typedText) {
dispatch_async(dispatch_get_main_queue()) {
myLabel.text = myLabel.text! + String(character)
}
NSThread.sleepForTimeInterval(characterInterval)
}
}
}
我将其更改为:
var skipThisText = false
func setTextWithAnimation(myLabel: UILabel, typedText: String, characterInterval: NSTimeInterval = 0.05){
myLabel.text = ""
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) {
for character in Array(typedText) {
dispatch_async(dispatch_get_main_queue()) {
myLabel.text = myLabel.text! + String(character)
}
if !skipThisText {
NSThread.sleepForTimeInterval(characterInterval)
}
}
}
}
@IBAction func skipTextAnimationButton(sender: AnyObject) {
skipThisText = true
}
但它不起作用,因为主线程不与dispatch_async(..)中的块通信。我必须使用dispatch_async()块来获得文本动画
有一个简单的解决方法吗?当按下按钮时,我应该更改什么来跳过NSThread.sleepForTimeInterval()?
谢谢