我正在使用iBeacons构建一个基于室内位置的应用程序但是我正在使用大量iPhone传感器以获得准确的移动表示(速度,方向等)我目前仍然坚持使用CoreMotion计步器并且它的步骤计算财产。我有一段代码只是简单地计算步骤并将它们打印在标签中,我注意到在设备注册我的移动之前需要大约10步,然后每隔三或四步更新标签。 “行走”状态下的这些更新很好,但我很想知道是否有可能加快初始响应并从静止状态转换 - >步行而不是10,将它减少到5,这是可以接受的。这是计算步骤的代码:
if(CMPedometer.isStepCountingAvailable()){
self.pedoMeter.queryPedometerDataFromDate(NSDate(), toDate: NSDate()) { (data : CMPedometerData!, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if(error == nil){
self.steps.text = "\(data.numberOfSteps)"
}
})
}
self.pedoMeter.startPedometerUpdatesFromDate(NSDate()) { (data: CMPedometerData!, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if(error == nil){
self.steps.text = "\(data.numberOfSteps)"
}
})
}
}
}
我还将更新间隔增加到最大值
manager.deviceMotionUpdateInterval = 0
这些是我正在使用的课程
let activityManager = CMMotionActivityManager()
let manager = CMMotionManager()
let pedoMeter = CMPedometer()
答案 0 :(得分:3)
您无法做到这一点,因为Apple根据您使用的设备对更新间隔进行了限制。你可以拥有的最大间隔是0.01秒。计步器通常在较长距离上工作得更好,你应该使用加速计数据。
答案 1 :(得分:0)
self.pedoMeter.startPedometerUpdatesFromDate(NSDate()) { (data: CMPedometerData!, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if(error == nil){
self.steps.text = "\(data.numberOfSteps)"
}
})
}
无法在swift 2.0中调用startPedometerUpdatesFromDate
获取错误,但在swift 1.2中正常工作。