Я пытаюсь обнаружить три действия: когда пользователь начинает ходить, бегать или бегать. Затем я хочу знать, когда остановка. Мне удалось обнаружить, когда кто-то ходит, бегает или бежит со следующим кодом:
- (void)update:(CMAccelerometerData *)accelData {
[(id) self setAcceleration:accelData.acceleration];
NSTimeInterval secondsSinceLastUpdate = -([self.lastUpdateTime timeIntervalSinceNow]);
if (labs(_acceleration.x) >= 0.10000) {
NSLog(@"walking: %f",_acceleration.x);
}
else if (labs(_acceleration.x) > 2.0) {
NSLog(@"jogging: %f",_acceleration.x);
}
else if (labs(_acceleration.x) > 4.0) {
NSLog(@"sprinting: %f",_acceleration.x);
}
Проблема, с которой я сталкиваюсь, двукратна:
1) обновление вызывается несколько раз при каждом движении, вероятно, потому, что оно так часто проверяет, что когда пользователь начинает ходить (т.е. _acceleration.x > =.1000), он еще > =.1000, когда он снова вызывает обновление.
Пример журнала:
2014-02-22 12:14:20.728 myApp[5039:60b] walking: 1.029846
2014-02-22 12:14:20.748 myApp[5039:60b] walking: 1.071777
2014-02-22 12:14:20.768 myApp[5039:60b] walking: 1.067749
2) Мне трудно понять, как определить, когда пользователь остановился. Кто-нибудь имеет рекомендации о том, как реализовать "Остановить обнаружение"