主线程上的Swift UIProgressView,更新属性但不更新UI

时间:2015-09-13 07:23:23

标签: ios multithreading swift

我有一个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)
    }
}

1 个答案:

答案 0 :(得分:1)

就像您所说的“在主线程上移动UIProgressView,更新属性而不是UI”一样,您应该检查UI属性指示器,并设置具有UIProgressView对象的宽度约束的值。