我有一些运行时间约为 0.2 秒的繁重代码。
我这样设置活动指示器;但是,它并没有显示出来,而是整个屏幕冻结了大约 0.2 秒,直到代码完成。
func heavyWork() {
self.actvityIndicator.startAnimating()
...
// heavy loop codes here
...
self.activityIndicator.stopAnimating()
}
这是使用活动指示器的正确方法吗?
当我评论出来的时候
// self.activityIndicator.stopAnimating()
活动指示器显示并停留在那里 - 代码设置正确。
但UI似乎没有及时更新。
正如我所说,在繁重的代码完成之前,屏幕只是冻结而不显示活动指示器。
也许你想继续这样的模式:
func heavyWork() {
self.actvityIndicator.startAnimating()
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
// ...
// heavy loop codes here
// ...
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.activityIndicator.stopAnimating()
})
});
}
因为繁重的工作应该发生在背景线程,您需要更新 UImain线程后。
注意:显然假设您调用 func heavyWork()
在主线程上;如果没有,您可能还需要将初始 UI 更新转移到主线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)