Swift:如何在最短的时间内显示活动指标?

时间:2017-02-25 13:26:49

标签: ios swift activity-indicator

我们的应用正在调用import Data.Ratio (Rational) import Formatting newtype Price = Price {getPrice :: Rational} instance Show Price where show (Price p) = formatToString (fixed 2) p 方法,该方法在刷新运行时显示refreshData()。问题是刷新有时可能非常快,导致指示器出现时闪烁​​并快速连续消失。我们如何确保指标出现的时间最短?

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

2 个答案:

答案 0 :(得分:6)

添加实例变量以记录开始长时间运行任务时的开始时间,并计算任务完成后经过的时间。 (我们假设您将已用时间存储在名为elapsed的{​​{1}}中。)

使用对DispatchQueue.main.asyncAfter()的调用关闭活动指示符,如果长时间运行的任务至少需要2秒,则将其传递给.now()的最后期限,如果是.now() + 2.0 - elapsed则为var delay = 0.0 if elapsed < 2.0 { delay = 2.0 - elapsed } DispatchQueue.main.asyncAfter(deadline: .now() + delay) { activityIndicator.stopAnimating() activityIndicator.hidden = true } 不到2秒钟。

这样的事情:

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

编辑:

结合Downgoat的建议,我们可以使代码更清晰,更易于理解:

{{1}}

答案 1 :(得分:0)

迅速> = 3.1

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