Swift: 如何显示 Activity 指标最短时间?

Swift: How to display Activity Indicator for minimum amount of time?

我们的应用正在调用 refreshData() 方法,该方法在刷新为 运行 时显示 UIActivityIndicatorView。问题是刷新有时可能非常快,导致指示器在快速连续出现和消失时出现闪烁。我们如何确保指标出现的时间最短?

换句话说,即使刷新完成非常快,也要确保指示器至少显示两秒。

添加一个实例变量来记录开始长运行任务的开始时间,并在任务完成后计算经过的时间。 (假设您将经过的时间存储在名为 elapsedDouble 中。)

调用 DispatchQueue.main.asyncAfter() 关闭 activity 指示器,如果长 运行 任务至少花费 2秒,或者 .now() + 2.0 - elapsed 如果少于 2 秒。

像这样:

var delay = 0.0
if elapsed < 2.0 {
  delay = 2.0 - elapsed
}
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
  activityIndicator.stopAnimating()
  activityIndicator.hidden = true
}

编辑:

结合Downgoat的建议,我们可以让代码更简洁易读:

let delay = max(0.0, 2.0 - elapsed)
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
  activityIndicator.stopAnimating()
  activityIndicator.hidden = true
}

Swift >= 3.1

let delay = 2 // seconds
self.activityIndicator.startAnimating()
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(delay)) {
    self.activityIndicator.stopAnimating()
    self.activityIndicator.isHidden = true
}