1 CMPedometer介绍
- CMPedometer(计步器)是 CoreMotion 框架中的一个功能类,主要是保存有关步行(或跑步、爬楼)的一些信息。
- CMPedometer 同时能保存近7天的步数记录,并提供了查询近7天内任意时间段的步数信息。
- 想要使用 CMPedometer,系统最低版本需要是 iOS8(部分功能需要 iOS9)
2 使用样例
(1)程序启动后先判断设备是否支持计步器。
(2)如果支持的话则实时获取当天的用户运动数据,比如:跑步+走路的步数、距离、爬的楼层数、下的楼层数、当前移动速度。并将这些数据不断更新到界面上。

3 样例实现
(1)由于安全限制,首先我们要在 info.plist 文件中加入访问用户健康和运动信息的相关描述。

(2)样例代码
import UIKit
import CoreMotion
class ViewController: UIViewController {
//用于显示实时信息
@IBOutlet weak var textView: UITextView!
//计步器对象
let pedometer = CMPedometer()
override func viewDidLoad() {
super.viewDidLoad()
//开始计步器更新
startPedometerUpdates()
}
// 开始获取步数计数据
func startPedometerUpdates() {
//判断设备支持情况
guard CMPedometer.isStepCountingAvailable() else {
self.textView.text = "\n当前设备不支持获取步数\n"
return
}
//获取今天凌晨时间
let cal = Calendar.current
var comps = cal.dateComponents([.year, .month, .day], from: Date())
comps.hour = 0
comps.minute = 0
comps.second = 0
let midnightOfToday = cal.date(from: comps)!
//初始化并开始实时获取数据
self.pedometer.startUpdates (from: midnightOfToday, withHandler: { pedometerData, error in
//错误处理
guard error == nil else {
print(error!)
return
}
//获取各个数据
var text = "---今日运动数据---\n"
if let numberOfSteps = pedometerData?.numberOfSteps {
text += "步数: \(numberOfSteps)\n"
}
if let distance = pedometerData?.distance {
text += "距离: \(distance)\n"
}
if let floorsAscended = pedometerData?.floorsAscended {
text += "上楼: \(floorsAscended)\n"
}
if let floorsDescended = pedometerData?.floorsDescended {
text += "下楼: \(floorsDescended)\n"
}
if let currentPace = pedometerData?.currentPace {
text += "速度: \(currentPace)m/s\n"
}
if let currentCadence = pedometerData?.currentCadence {
text += "速度: \(currentCadence)步/秒\n"
}
//在线程中更新文本框数据
DispatchQueue.main.async{
self.textView.text = text
}
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}