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

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

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

Спасибо заранее.

Ответ 1

Думаю, вам нужно использовать 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 станет истинным дважды для каждого отдельного движения.

Ответ 2

В 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
    }
}