gpt4 book ai didi

ios - 进度条不会从 for 循环更新

转载 作者:行者123 更新时间:2023-11-29 05:33:21 27 4
gpt4 key购买 nike

我已经经历过所有类似的问题,但我似乎无法解决这个问题。我试图在我的 xcode 项目中迭代 10 次迭代循环,并每次将进度条更新 10%。

尽管我尝试使用 DispatchQueue,进度条似乎直到最后才更新。

@IBOutlet weak var signingBar: UIProgressView!
@IBOutlet weak var contButton: UIButton!
@IBAction func goButton(_ sender: UIButton) {

DispatchQueue.global(qos: .utility).async {
for i in 1...10 {

// run function x times
runSignings(iterations: 1)

DispatchQueue.main.async {
// now update UI on main thread
self.signingBar.setProgress(Float(i/10), animated: true)

if i == 10 {
self.contButton.isHidden = false
}
else {
self.contButton.isHidden = true
}
}
}
}
}

我希望它能够运行我的函数并在每个 for 循环结束时更新 UI,但目前在所有循环完成之前不会更新进度条。

最佳答案

似乎Float(i/10)应该更改为Float(i)/10,因为前一个用两个整数进行除法然后转换为 float ,它将始终返回 0,直到 i 达到 10。

此外,如果我正确理解您的问题,您希望与每一步i同步更新进度。

因为您在主线程中使用 DispatchQueue.main.async 异步更新 signingBar,所以 for 循环仍然会进行开启但未被 self.signingBar.setProgress 阻止。

如果你想确保signingBar逐步更新,可以使用DispatchGroup等待进度条更新。

// At each 'i' step

let group = DispatchGroup()
group.enter()

// run function x times
runSignings(iterations: 1)

DispatchQueue.main.async {
// now update UI on main thread
self.signingBar.setProgress(Float(i)/10, animated: true)

group.leave()
}

group.wait()

希望以上内容可以帮助到您。

关于ios - 进度条不会从 for 循环更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57316869/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com