我将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)
}
}
}
它正在打印更新的值,但不会反映在UI中。
在viewDidLayoutSubviews()中调用时有效
override func viewDidLayoutSubviews() {
dispatch_async(dispatch_get_main_queue()) {
self.playerExpBar.setProgress(0.0, animated: true)
}
}
最佳答案
就像您说的“在主线程上移动UIProgressView,更新属性而不是UI”一样,您应该检查UI属性指示器,并使用UIProgressView对象的宽度约束设置一个值。