当for循环还在进行时,UILabel会更新吗?

时间:2015-07-08 18:08:20

标签: ios swift

我有一个生成6个随机数的UIButton,并在循环结束后在6个UILabel上显示它们。

有没有办法为每个标签添加延迟并更新它们,看起来数字是逐个生成的?

继承我的功能代码,我尝试使用dispatch_async并在另一个线程中使用usleep,目前该程序就像我想要的那样工作,但是我不知道这是否是最好的方法

    @IBAction func generateNumber() {
    generateButton.enabled = false
    clearLottoLabels()
    for var i = 1; i<50; ++i{
        lottoNumbers.append(i)
    }


    dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)){
        for label in self.lottoLabels{

            self.lottoNumbers.shuffle()
            var lotto = String(self.lottoNumbers.removeLast())
            usleep(100000)

            dispatch_async(dispatch_get_main_queue()){
                label.text! = lotto
            }
        }
    }

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.6 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { () -> Void in
        self.generateButton.enabled = true
    }
}

1 个答案:

答案 0 :(得分:1)

尝试

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    // your UI code here
});