Безопасный интервал обновления для startDeviceMotionUpdatesToQueue:withHandler:?

РЕДАКТИРОВАТЬ: добавил глобальный и теперь он работает. Но у меня все еще есть сомнения.. Пожалуйста, продолжайте читать:)

Я хочу, чтобы ускорение осуществлялось по оси Y всякий раз, когда мне это нужно, и использую его в разных частях моего кода. В этом примере я использую его внутри цикла while для тестирования...

Мой код работает, но правильно ли я использую метод UpdateToQueue... или это своего рода "неортодоксальный" способ достижения того, чего я хочу?

Я установил интервал обновления в 30 мс. Как вы думаете, это "безопасный" интервал обновления? Мне сказали, что я должен быть осторожен при выборе, потому что текущие или более поздние обновления оборудования /iOS могут не поспевать за таким интервалом, это правда?

double myAcceleration; // a global..

-(void) play // my "main" method..
{
    CMMotionManager *motionManager = [[CMMotionManager alloc] init];
    motionManager.deviceMotionUpdateInterval = 0.03; // update every 30ms
    [motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]  
                                       withHandler:^(CMDeviceMotion *motion, NSError *error) 
                                       {
                                           myAcceleration = motion.userAcceleration.y;
                                       }
    ];

    while(!self.stopButtonPressed)
    {
        NSLog(@"Y-Axis acceleration is %f", myAcceleration);
    }
}

2 ответа

Решение

Это нормально использовать таким образом.

Что касается временного интервала: текущий максимальный предел обновления составляет 100 Гц ( 100 раз в секунду, 0,01 секунды для одного обновления акселерометра), а минимальный - 10 Гц ( AFAIK). если вы установили временной интервал в таких диапазонах, он наверняка будет поддерживаться в текущих и следующих выпусках яблочных гаджетов. Но вы не можете полагаться на временной интервал по умолчанию и молиться о том, чтобы он везде был одинаковым, потому что apple может изменить минимальный и максимальный диапазоны (например, некоторые новые микросхемы будут поддерживать частоту обновления 500 Гц), и поэтому значение по умолчанию также изменится.

В заключение. Я нашел ответ на свой вопрос:)

Документы Apple:

Выбор интервала обновления события движения

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

Таблица 4-1 перечисляет некоторые распространенные частоты обновления и объясняет, что вы можете делать с данными, генерируемыми на этой частоте. Лишь немногие приложения нуждаются в ускорении событий, доставляемых 100 раз в секунду.

Частота события (Гц) Использование

10–20 Подходит для определения вектора текущей ориентации устройства.

30–60 Подходит для игр и других приложений, использующих акселерометр для ввода данных в реальном времени.

70–100 Подходит для приложений, которым необходимо обнаруживать высокочастотное движение. Например, вы можете использовать этот интервал для обнаружения удара пользователя по устройству или очень быстрого его встряхивания.

Вы можете установить интервал создания отчетов, равный 10 миллисекундам (мс), что соответствует частоте обновления 100 Гц, но большинство приложений работают достаточно с большим интервалом.

В двух словах, как уже сказал Богдан: 10 Гц -100 Гц

Источник: Выбор интервала обновления события движения

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