5

iBeacons を使用して屋内位置情報ベースのアプリを構築していますが、正確な動きの表現 (速度、方向など) を取得するために多くの iPhone センサーを使用しています。単純に歩数を数えてラベルに出力するコードがありますが、デバイスが私の動きを登録し、3 つまたは 4 つのステップごとにラベルを更新するまでに約 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()
4

2 に答える 2

3

Apple は、使用しているデバイスに基づいて更新間隔に制限を設けているため、これを行うことはできません。設定できる最大の間隔は 0.01 秒です。歩数計は通常、距離が長いほどうまく機能します。そのためには、加速度計のデータを使用する必要があります。

于 2015-05-22T08:31:42.090 に答える
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 では正常に動作します。

于 2015-08-07T12:10:04.893 に答える