iOS - начать получать обновления гироскопа

Я использую CMMotionManager для доступа к данным гироскопа для iOS. Я вижу, что есть 2 метода:

startGyroUpdates 
startGyroUpdatesToQueue:withHandler:

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

Любая помощь приветствуется,


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


Ответы (2)


Очередь используется для гарантии обработки всех событий, даже если интервал обновления установлен в deviceMotionUpdateInterval создает события с большей скоростью, чем вы можете обрабатывать в режиме реального времени. Если вы не возражаете против пропущенных событий, не имеет значения, какой из двух вы используете, просто откажитесь от них.

Соответствующий документ Apple: Основное движение Руководства по обработке событий:

Для каждого из типов движения данных, описанных выше, класс CMMotionManager предлагает два подхода к получению данных о движении: метод принудительной отправки и подход получения.

  • Толкать. Приложение запрашивает интервал обновления и реализует блок (определенного типа) для обработки данных движения; затем он запускает обновления для этого типа данных движения, передавая в Core Motion очередь операций, а также блок. Core Motion доставляет каждое обновление в блок, который выполняется как задача в очереди операций.

  • Вытащить. Приложение запускает обновления типа данных о движении и периодически производит выборку самых последних измерений данных о движении.

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

Это не ваш вопрос, но мне интересно, хотите ли вы простое вращение по осям x, y, z или более полезный шаг, крен, рыскание. В дальнейшем используйте startDeviceMotionUpdatesToQueue:withHandler: вместо startGyroUpdatesToQueue:withHandler:.

person Jano    schedule 29.08.2011

Изменить: см. комментарий Томми к этому ответу. Мое предположение о шаблоне делегата было неверным.

Я не особо знаком с CMMotionManager, но по названию могу предположить, что:

  • startGyroUpdates
    Доставляет обновления гироскопа, вызывая методы делегата в основном потоке.
  • startGyroUpdatesToQueue:withHandler:
    Доставляет обновления гироскопа, вызывая блок обработчика в заданной очереди.

Первым будет стиль до блока с использованием делегатов, а вторым будет блочная версия на основе GCD.

person Lily Ballard    schedule 29.08.2011
comment
CMMotionManager был представлен в iOS 4, поэтому он делает несколько радикальный шаг, не имея никаких методов делегата — вы либо предоставляете блок, либо выполняете опрос. Таким образом, startGyroUpdates предназначен для людей, которые хотят время от времени проверять состояние, а не для тех, кто хочет получать оперативные обновления. Таким образом, это также намек на то, что Apple может рассматривать делегатов как устаревшую идею. - person Tommy; 30.08.2011