我有一个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)
}
}
答案 0 :(得分:1)
就像您所说的“在主线程上移动UIProgressView,更新属性而不是UI”一样,您应该检查UI属性指示器,并设置具有UIProgressView对象的宽度约束的值。