从主线程更改dispatch_async内的参数

时间:2015-08-17 09:51:51

标签: ios multithreading swift dispatch-async

我有一个用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()?

谢谢

0 个答案:

没有答案