我正在尝试显示 CMPedometer
的节奏和配速数据。当我在连接手机的情况下运行该应用程序时,它会立即通过 print("...")
函数将数据输出写入控制台,但需要多次轮流才能将数据显示在UILabel
。
我怎样才能尽快获取数据以便使用它们?
最好的,扎克
import UIKit
import CoreMotion
class ViewController: UIViewController {
let pedometer = CMPedometer()
@IBOutlet weak var paceLabel: UILabel!
@IBOutlet weak var cadenceLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
guard CMPedometer.isCadenceAvailable() && CMPedometer.isPaceAvailable() else{
print("Pace and cadence data are not available")
return
}
let oneWeekAgo = NSDate(timeIntervalSinceNow: -(7 * 24 * 60 * 60))
pedometer.startUpdates(from: oneWeekAgo as Date) {data, error in
guard let pData = data , error == nil else{
return
}
//The current pace of the user, measured in seconds per meter. (1 step = 83cm?)
if let pace = pData.currentPace{
print("Pace = \(pace)")
self.paceLabel.text = "Pace = \(round(Double(pace))*10/10)"
}
//The rate at which steps are taken, measured in steps per second.
if let cadence = pData.currentCadence{
self.cadenceLabel.text = "Cadence = \(cadence))"
print("Cadence = \(cadence)")
}
}// -----------------oneWeekAgo
}// -----------------ViewDidLoad
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}//-------------------- UIViewController
最佳答案
更新 block 在后台线程上调用,您需要在主线程上更新您的 UI。将 UI 更新调用打包回主线程:
Dispatch.main.async {
//The current pace of the user, measured in seconds per meter. (1 step = 83cm?)
if let pace = pData.currentPace{
print("Pace = \(pace)")
self.paceLabel.text = "Pace = \(round(Double(pace))*10/10)"
}
//The rate at which steps are taken, measured in steps per second.
if let cadence = pData.currentCadence{
self.cadenceLabel.text = "Cadence = \(cadence))"
print("Cadence = \(cadence)")
}
}
}
关于ios - 为什么 "print into console"比 ".text into label "快得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40536788/