Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 几秒钟后显示活动指示器?_Ios_Swift_Uiactivityindicatorview - Fatal编程技术网

Ios 几秒钟后显示活动指示器?

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

如果我的网络请求需要很长时间才能完成,我想为它显示一个活动指示器

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

我正在考虑使用:

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