我有一个 UIProgressView 设置为 IBOutlet,我正在尝试调用 setProgress 方法。第一次在 viewDidLayoutSubviews() 中调用时它工作得很好,但在其他任何地方都没有。
我在主线程上使用
调用它func calculateEXP()
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
//Determining playerExpBar's new value
let gainedEXP = Float.random(lowerEXP...upperEXP)
let progress = (currentEXP + gainedEXP) / maxEXP
//Setting playerExpBar's progress on the main thread
dispatch_async(dispatch_get_main_queue()) {
//Set value to 0.5 for testing purposes
self.playerExpBar.setProgress(0.5, animated: true)
print(self.playerExpBar.progress)
}
}
它正在打印更新后的值,但不会反射(reflect)在 UI 中。
在 viewDidLayoutSubviews() 中调用时工作
override func viewDidLayoutSubviews() {
dispatch_async(dispatch_get_main_queue()) {
self.playerExpBar.setProgress(0.0, animated: true)
}
}
最佳答案
就像你说的,“在主线程上 Swift UIProgressView,更新属性但不更新 UI”,你应该检查你的 UI 属性指示器,设置一个具有 UIProgressView 对象宽度约束的值。
关于ios - 主线程上的 Swift UIProgressView,更新属性但不更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32547301/