代码之家  ›  专栏  ›  技术社区  ›  jackdm

几秒钟后是否显示活动指示器?

  •  2
  • jackdm  · 技术社区  · 7 年前

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

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

    我正在考虑使用:

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

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

    2 回复  |  直到 7 年前
        1
  •  2
  •   Milan Nosáľ    7 年前

    使用 DispatchWorkItem :

    fileprivate var indicatorTask: DispatchWorkItem?
    

    要在这3秒钟后运行它:

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

    既然你提到了 indicatorTask 你可以随时取消它。

        2
  •  0
  •   CZ54    7 年前

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

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