数秒后显示 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
的引用,您可以随时取消它。
如果需要很长时间才能完成,我想为我的网络请求显示一个 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
的引用,您可以随时取消它。