我要像这样循环更新UILabel:
DispatchQueue.main.async {
self.runningLabelView.text = text
}
text
正在每秒循环更新60次,总共1秒钟。
对于UI来说,这似乎太快了,因为文本会在开始的1秒后不断更新几秒钟。
我可以在此循环中跳过任何待处理的文本更新,以便在循环结束时完成文本更新吗?
答案 0 :(得分:3)
您的问题是text
的值是在将闭包添加到调度队列时捕获的,而不是在闭包执行时捕获的。这意味着每个单独的文本分配都将按顺序进行。
一种解决方案是使用属性而不是捕获的局部变量。这样,标签将设置为当前属性值,而不是过期的捕获值:
self.messageText = someNewValue
DispatchQueue.main.async {
self.runningLabelView.text = self.messageText
}
另一种可能更好的方法是分发更少的更新,但是您需要提供更多信息。