Я могу только подтвердить ваши выводы. Я также хотел получить «истинную» информацию в реальном времени. Как кажется на данный момент, API не способен на это; даже путем принудительного обновления обновлений в очереди, синхронизации, асинхронизации и т. д.
Для ссылок и других с этим вопросом, вот код, который я использую на основе Swift 3 и Xcode 8.2. Я просто применяю эту часть кода в соответствующем контроллере представлений после проверки CMPedometer.isStepCountingAvailable ().
Как вы можете видеть, я включил небольшую анимацию, чтобы обновить UILabel более жидким образом.
// Steps update in near realtime - UILabel
self.pedoMeter.startUpdates(from: midnightOfToday) { (data: CMPedometerData?, error) -> Void in
DispatchQueue.main.async(execute: { () -> Void in
if(error == nil){
self.todaySteps.text = "\(data!.numberOfSteps)"
// Animate the changes of numbers in the UILabel
UILabel.transition(with: self.todaySteps,
duration: 0.50,
options: .transitionCrossDissolve,
animations: nil,
completion: nil)
}
})
}