在进程发生时,ios视觉效果不会更新。 (斯威夫特3)

时间:2017-04-06 21:26:59

标签: ios swift multithreading swift3

我的流程需要一些时间来处理:

for n in 0..<currentAmount {
    if gcd(random(max: Int(randRange.value)), random(max: Int(randRange.value))) == 1{
        gcdCounter += 1
    }
    piProgress.setProgress(Float(Double(n)/Double(currentAmount)), animated: false)
}

首先,正确引用进度条。似乎有一些事情我不知道,当激活此循环的按钮进入时,按钮保持“灰色”,直到循环完成并且进度条根本不更新。如果我用

替换循环中的最后一行
print(Float(Double(n)/Double(currentAmount))

我可以在控制台中看到进度完美传递,那为什么视图不会更新呢?我在another thread上看到它与运行进程的线程有关,但这是在Objective-c中我认为,而不是Swift 3.请帮忙。我喜欢看我的应用做某事

编辑:浏览后,我发现此资源对于学习GCD非常有用:http://www.appcoda.com/grand-central-dispatch/

1 个答案:

答案 0 :(得分:1)

因为所有UI更新,即。任何UILabel,UIButton等的更新都必须在主线程上完成,即。 DispatchQueue.main.async { self.myLabel.text = "progress is now \(pc) %"

在主线程上完成任务是很好的,但必须在主线程上更新UI。这包括任何影响自动布局的内容。