Ios 几秒钟后显示活动指示器?
如果我的网络请求需要很长时间才能完成,我想为它显示一个活动指示器 是否有办法在经过一定的秒数后启动指示器,以允许完成请求?我不希望它立即闪现,因为这会在快速请求时造成不稳定的UI/UX,但看不到在较长请求时呈现它的最佳方式 我正在考虑使用:Ios 几秒钟后显示活动指示器?,ios,swift,uiactivityindicatorview,Ios,Swift,Uiactivityindicatorview,如果我的网络请求需要很长时间才能完成,我想为它显示一个活动指示器 是否有办法在经过一定的秒数后启动指示器,以允许完成请求?我不希望它立即闪现,因为这会在快速请求时造成不稳定的UI/UX,但看不到在较长请求时呈现它的最佳方式 我正在考虑使用: DispatchQueue.main.asyncAfter(deadline: .now() + 3.0, execute: {} 但是,即使请求在3秒内完成,这也会导致计时器显示…最快的方法是使用计时器对象。请求完成后,只需调用myTimer.inval
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0, execute: {}
但是,即使请求在3秒内完成,这也会导致计时器显示…最快的方法是使用
计时器对象。请求完成后,只需调用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
的引用,您可以随时取消它。我想在您的最后一行中,您想编写DispatchQueue.main
,而不是indicatorTask.main
,因为您只能在DispatchQueue
上执行DispatchWorkItem
。