iOS обнаруживает движение пользователя

Я хочу создать простое приложение, которое рисует простую линию на экране, когда я перемещаю свой телефон по оси Y из начальной точки в конечную точку, например, из точки a(0,0) в точку b(0, 10). пожалуйста помоги

демо:

1 ответ

Решение

Вам нужно инициализировать менеджер движения, а затем проверить motion.userAcceleration.y значение для соответствующего значения ускорения (измеряется в метрах / секунду / секунду).

В приведенном ниже примере я проверяю на 0,05, что я нашел довольно приличное движение вперед телефона. Я также жду, пока пользователь значительно замедлится (значение -Y), прежде чем рисовать. Настройка устройства MotionUpdateInterval будет определять реагирование вашего приложения на изменения скорости. Прямо сейчас это выборка в 1/60 секунды.

motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 1.0/60.0;
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
    NSLog(@"Y value is: %f", motion.userAcceleration.y);
    if (motion.userAcceleration.y > 0.05) { 
        //a solid move forward starts 
        lineLength++; //increment a line length value
    } 
    if (motion.userAcceleration.y < -0.02 && lineLength > 10) {
        /*user has abruptly slowed indicating end of the move forward.
         * we also make sure we have more than 10 events 
         */
        [self drawLine]; /* writing drawLine method
                          * and quartz2d path code is left to the 
                          * op or others  */
        [motionManager stopDeviceMotionUpdates];
    }
}];

Обратите внимание, что в этом коде предполагается, что телефон лежит ровно или слегка наклонен и что пользователь продвигается вперед (от себя или перемещается с телефоном) в портретном режиме.

Другие вопросы по тегам