Ios 如何处理对UI来说太快的更新?
我正在循环更新UILabel,如下所示:Ios 如何处理对UI来说太快的更新?,ios,swift,uilabel,Ios,Swift,Uilabel,我正在循环更新UILabel,如下所示: DispatchQueue.main.async { self.runningLabelView.text = text } text正在循环中每秒更新60次,总共1秒 这对于UI来说似乎太快了,因为文本在前1秒后几秒钟内不断更新 我是否可以在此循环期间跳过任何挂起的文本更新,以便文本更新随着循环的完成而完成?您的问题是,在将闭包添加到调度队列时,而不是在执行闭包时捕获text的值。这意味着每个单独的文本赋值将按顺序进行 一种解决方案是使用属性
DispatchQueue.main.async {
self.runningLabelView.text = text
}
text
正在循环中每秒更新60次,总共1秒
这对于UI来说似乎太快了,因为文本在前1秒后几秒钟内不断更新
我是否可以在此循环期间跳过任何挂起的文本更新,以便文本更新随着循环的完成而完成?您的问题是,在将闭包添加到调度队列时,而不是在执行闭包时捕获
text
的值。这意味着每个单独的文本赋值将按顺序进行
一种解决方案是使用属性而不是捕获的局部变量。这样,标签将设置为当前特性值,而不是过时的捕获值:
self.messageText = someNewValue
DispatchQueue.main.async {
self.runningLabelView.text = self.messageText
}
另一种可能更好的方法是调度更少的更新,但您需要提供更多信息。您的问题是,在将闭包添加到调度队列时捕获
文本的值,而不是在执行闭包时捕获。这意味着每个单独的文本赋值将按顺序进行
一种解决方案是使用属性而不是捕获的局部变量。这样,标签将设置为当前特性值,而不是过时的捕获值:
self.messageText = someNewValue
DispatchQueue.main.async {
self.runningLabelView.text = self.messageText
}
另一种可能更好的方法是发送更少的更新,但您需要提供更多信息。您需要显示更多代码。这里没有上下文,请考虑将文本更新与屏幕刷新同步。请查看CADisplayLink。()您需要显示更多代码。这里没有上下文,请考虑将文本更新与屏幕刷新同步。请查看CADisplayLink。()