数秒后显示 activity 指标?

Showing activity indicator after a number of seconds?

如果需要很长时间才能完成,我想为我的网络请求显示一个 activity 指示符。

有什么方法可以在经过一定秒数后启动指标以允许请求完成吗?我不希望它立即闪现,因为这会在快速请求时造成断断续续 UI/UX,但看不到在较长请求时呈现它的最佳方式?

我正在考虑使用:

DispatchQueue.main.asyncAfter(deadline: .now() + 3.0, execute: {}

然而,即使请求在 3 秒内完成,这也会导致计时器显示...

最快的方法是使用 Timer 对象。请求完成后,只需调用 myTimer.invalidate

 let timer =  Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(showIndicator), userInfo:nil, repeats:false)

使用DispatchWorkItem:

fileprivate var indicatorTask: DispatchWorkItem?

到 运行 3 秒后:

func prepareActivityIndicator() {
    indicatorTask?.cancel()
    indicatorTask = DispatchWorkItem {
        // show indicator
    }
    DispatchQueue.main.asyncAfter(deadline: .now() + 3, execute: indicatorTask!)
}

由于您有对 indicatorTask 的引用,您可以随时取消它。