如何处理对于UI而言太快的更新?

时间:2018-10-16 03:27:47

标签: ios swift uilabel

我要像这样循环更新UILabel:

DispatchQueue.main.async {
    self.runningLabelView.text = text
}

text正在每秒循环更新60次,总共1秒钟。

对于UI来说,这似乎太快了,因为文本会在开始的1秒后不断更新几秒钟。

我可以在此循环中跳过任何待处理的文本更新,以便在循环结束时完成文本更新吗?

1 个答案:

答案 0 :(得分:3)

您的问题是text的值是在将闭包添加到调度队列时捕获的,而不是在闭包执行时捕获的。这意味着每个单独的文本分配都将按顺序进行。

一种解决方案是使用属性而不是捕获的局部变量。这样,标签将设置为当前属性值,而不是过期的捕获值:

self.messageText = someNewValue
DispatchQueue.main.async {
    self.runningLabelView.text = self.messageText
}

另一种可能更好的方法是分发更少的更新,但是您需要提供更多信息。