Swift 实时更新 UILabel
Updading UILabel in real time in Swift
我正在尝试更新 queryPedometerDataFromDate(..) 方法处理程序中的 UILabel 文本。 UILabel 的更新会在 20 或 25 秒后反映出来。但我几乎实时看到 println() 输出。有什么办法让它更快吗?
如果我在此处理程序之外更新 UILabel 的文本,那么它会再次实时更新。
pedoman.queryPedometerDataFromDate(yester, toDate: now) {
(data:CMPedometerData!, errr:NSError!) -> Void in
//Below statement take 20 to 30 second to reflect on UILabel
self.StringSteps.text = data.numberOfSteps.stringValue
//Below statement prints on Output in real time.
println("Number of Steps \(data.numberOfSteps)")
}
您需要在主线程上更新 UILabel。
dispatch_async(dispatch_get_main_queue(), {
self.StringSteps.text = data.numberOfSteps.stringValue
});
您提供给 queryPedometerDataFromDate:toDate:withHandler:
方法的块在串行队列中执行,而不是在主线程中执行。您应该从主线程进行所有 UI 更新。您可以像这样使用 GCD 来完成此操作:
dispatch_async(dispatch_get_main_queue(), {
self.StringSteps.text = data.numberOfSteps.stringValue
})
Swift 4.2
DispatchQueue.main.async {
self.StringSteps.text = data.numberOfSteps.stringValue}
我正在尝试更新 queryPedometerDataFromDate(..) 方法处理程序中的 UILabel 文本。 UILabel 的更新会在 20 或 25 秒后反映出来。但我几乎实时看到 println() 输出。有什么办法让它更快吗? 如果我在此处理程序之外更新 UILabel 的文本,那么它会再次实时更新。
pedoman.queryPedometerDataFromDate(yester, toDate: now) {
(data:CMPedometerData!, errr:NSError!) -> Void in
//Below statement take 20 to 30 second to reflect on UILabel
self.StringSteps.text = data.numberOfSteps.stringValue
//Below statement prints on Output in real time.
println("Number of Steps \(data.numberOfSteps)")
}
您需要在主线程上更新 UILabel。
dispatch_async(dispatch_get_main_queue(), {
self.StringSteps.text = data.numberOfSteps.stringValue
});
您提供给 queryPedometerDataFromDate:toDate:withHandler:
方法的块在串行队列中执行,而不是在主线程中执行。您应该从主线程进行所有 UI 更新。您可以像这样使用 GCD 来完成此操作:
dispatch_async(dispatch_get_main_queue(), {
self.StringSteps.text = data.numberOfSteps.stringValue
})
Swift 4.2
DispatchQueue.main.async {
self.StringSteps.text = data.numberOfSteps.stringValue}