Swift: 如何显示 Activity 指标最短时间?
Swift: How to display Activity Indicator for minimum amount of time?
我们的应用正在调用 refreshData()
方法,该方法在刷新为 运行 时显示 UIActivityIndicatorView
。问题是刷新有时可能非常快,导致指示器在快速连续出现和消失时出现闪烁。我们如何确保指标出现的时间最短?
换句话说,即使刷新完成非常快,也要确保指示器至少显示两秒。
添加一个实例变量来记录开始长运行任务的开始时间,并在任务完成后计算经过的时间。 (假设您将经过的时间存储在名为 elapsed
的 Double
中。)
调用 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
}
我们的应用正在调用 refreshData()
方法,该方法在刷新为 运行 时显示 UIActivityIndicatorView
。问题是刷新有时可能非常快,导致指示器在快速连续出现和消失时出现闪烁。我们如何确保指标出现的时间最短?
换句话说,即使刷新完成非常快,也要确保指示器至少显示两秒。
添加一个实例变量来记录开始长运行任务的开始时间,并在任务完成后计算经过的时间。 (假设您将经过的时间存储在名为 elapsed
的 Double
中。)
调用 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
}