增加iOS上的计步器初始响应

时间:2015-04-17 11:50:58

标签: ios swift accelerometer core-motion indoor-positioning-system

我正在使用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()

2 个答案:

答案 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中正常工作。