我的流程需要一些时间来处理:
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/
答案 0 :(得分:1)
因为所有UI更新,即。任何UILabel,UIButton等的更新都必须在主线程上完成,即。 DispatchQueue.main.async { self.myLabel.text = "progress is now \(pc) %"
在主线程上完成任务是很好的,但必须在主线程上更新UI。这包括任何影响自动布局的内容。