我有一些繁重的代码,可运行约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()
})
});
}
因为繁重的工作应该在后台线程中进行,所以之后您需要在主线程上更新UI。
注意:显然,假设您在主线程上调用了
func heavyWork()
;如果不是这样,您可能还需要将最初的UI更新分散到主线程上。关于ios - 事件指示器未出现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31269716/