iOS Gyroscope API

Я учусь писать приложение, используя датчик гироскопа в iOS. Существуют ли классы для работы с гироскопом, подобные UIAcceleration / UIAccelerometer / UIAccelerometerDelegate для акселерометра?


person user682765    schedule 21.08.2011    source источник


Ответы (2)


Первый импорт CoreMotion framework

#import <CoreMotion/CoreMotion.h>

    self.motionManager = [[CMMotionManager alloc] init];


    //Gyroscope
    if([self.motionManager isGyroAvailable])
    {
        /* Start the gyroscope if it is not active already */ 
        if([self.motionManager isGyroActive] == NO)
        {
            /* Update us 2 times a second */
            [self.motionManager setGyroUpdateInterval:1.0f / 2.0f];

            /* Add on a handler block object */

            /* Receive the gyroscope data on this block */
            [self.motionManager startGyroUpdatesToQueue:[NSOperationQueue mainQueue]
             withHandler:^(CMGyroData *gyroData, NSError *error)
            {
                NSString *x = [[NSString alloc] initWithFormat:@"%.02f",gyroData.rotationRate.x];
                self.gyro_xaxis.text = x;

                NSString *y = [[NSString alloc] initWithFormat:@"%.02f",gyroData.rotationRate.y];
                self.gyro_yaxis.text = y;

                NSString *z = [[NSString alloc] initWithFormat:@"%.02f",gyroData.rotationRate.z];
                self.gyro_zaxis.text = z;
            }];
        }
    }
    else
    {
        NSLog(@"Gyroscope not Available!");
    }

Как говорится в коде, сначала я создаю экземпляр менеджера движения. Затем я смотрю, поддерживает ли устройство гироскоп. В противном случае установите интервал обновления гироскопа, а затем зарегистрируйтесь, чтобы получать обновления от гироскопа. С помощью этих обновлений вам необходимо определить собственную логику того, что вы хотите делать со значениями. Вот и все, вам хорошо ...

person Srikar Appalaraju    schedule 21.08.2011
comment
[self.motionManager isGyroAvailable] Обязательна ли эта проверка? Что произойдет, если гироскоп недоступен? Приложение вылетает? Или верните нулевые значения. Если он возвращает нулевые значения, то какой объект вернет нулевое значение? - person user682765; 23.08.2011
comment
Это проверка, так как у старых iPhone нет гироскопа. Может произойти сбой, если вы начнете использовать API гироскопа, когда само устройство не поддерживает. Лучше быть в безопасности, чем потом сожалеть... - person Srikar Appalaraju; 24.08.2011
comment
В качестве обновления: в документации Apple для startGyroUpdatesToQueue не рекомендуется использовать основную очередь, поскольку это может вызвать задержку. Либо используйте другую очередь, либо просто используйте свойство .gyroData менеджера движения для получения данных гироскопа. Если вы делаете игру с использованием фреймворков движения, я бы рекомендовал установить интервал 1/60 секунды (чтобы соответствовать частоте кадров), и если у любого из них есть проблема, уменьшите интервал для получения данных гироскопа. . - person DDPWNAGE; 04.07.2015

Для данных гироскопа вам необходимо использовать CoreMotion. Начните с чтения соответствующий раздел Руководства по обработке событий для iOS. Вам нужно будет работать с двумя классами: CMGyroData, который инкапсулирует данные событий гироскопа, и CMMotionManager, который используется для регистрации событий гироскопа.

Дополнительную информацию можно найти в выбранном ответе на этот вопрос: Образец кода гироскопа Apple

person Carter Allen    schedule 21.08.2011