Простое обнаружение движения iPhone

Мне нужно определить, когда гироскоп / акселерометр активируется в определенном количестве. В основном, чтобы обнаружить, когда есть движение устройства. Я ничего не знаю о Core Motion.

Может быть, кто-то может направить меня в учебник для начинающих или что-то.

Заранее спасибо.

2 ответа

Решение

Я думаю, что вы должны использовать Core Motion. Хорошей новостью является то, что это не так сложно использовать для вашей проблемной области. Начните читать Руководство по обработке событий, особенно раздел Обработка обработанных данных движения устройства. Если вам просто интересно узнать, что было сделано небольшое движение, как вы заявили, вы можете пропустить обработку поворота и узкую обработку сигнала в CMDeviceMotion.userAcceleration. Это связано с тем, что каждое вращение также приводит к сигналам акселерометра.

Создайте CMDeviceMotionHandler, как описано в startDeviceMotionUpdatesToQueue: withHandler: Ваш CMDeviceMotionHandler должен сделать что-то вроде:

float accelerationThreshold = 0.2; // or whatever is appropriate - play around with different values
CMAcceleration userAcceleration = deviceMotion.userAcceleration;
if (fabs(userAcceleration.x) > accelerationThreshold) 
    || fabs(userAcceleration.y) > accelerationThreshold
    || fabs(userAcceleration.z) > accelerationThreshold) {
    // enter code here
}

В основном это все. Имейте в виду, что каждое ускорение будет иметь аналог. Это означает, что если вы приложите усилие для перемещения (то есть ускорения) устройства вправо, для замедления будет аналог, который остановит движение и позволит устройству остановиться в новом положении. Так что ваши if условие станет истинным дважды для каждого движения.

В viewDidAppear, станьте первым респондентом:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}

И убедитесь, что вы можете быть первым ответчиком:

- (BOOL)canBecomeFirstResponder {
    return YES;
}

Затем вы можете реализовать обнаружение движения.

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (event.subtype == UIEventTypeMotion){
        //there was motion
    }
}
Другие вопросы по тегам