我有一些繁重的代码,可运行约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/

10-10 19:45