如果需要很长时间才能完成,我想显示网络请求的活动指示器。
有一种方法可以在经过一定的秒数后启动指标以允许请求完成吗?我不希望它立即闪现,因为这会在快速请求中产生不稳定的UI / UX,但是无法看到在更长的请求中呈现它的最佳方式?
我正在考虑使用:
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0, execute: {}
然而,即使请求在3秒内完成,这也会导致计时器显示......
答案 0 :(得分:2)
使用DispatchWorkItem
:
fileprivate var indicatorTask: DispatchWorkItem?
在这3秒后运行它:
func prepareActivityIndicator() {
indicatorTask?.cancel()
indicatorTask = DispatchWorkItem {
// show indicator
}
DispatchQueue.main.asyncAfter(deadline: .now() + 3, execute: indicatorTask!)
}
由于你引用了indicatorTask
,你可以随时取消它。
答案 1 :(得分:0)
最快的方法是使用Timer
对象。请求完成后,只需致电myTimer.invalidate
let timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(showIndicator), userInfo:nil, repeats:false)