我将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对象的宽度约束设置一个值。

10-08 05:28