Я портирую приложение, которое я изначально написал, используя акселерометр для IOS 3, чтобы включить новые возможности движения IOS 4.
Во время захвата движения приложение делает немного больше - например, никаких обновлений графики.
Я делаю следующее для настройки обновлений движения в качестве замены моего предыдущего использования акселерометра.Я понимаю, что могу перестроить, чтобы сделать свой собственный опрос, используя NSTimer или что-то еще, и могу продолжать это.
[motionManager setDeviceMotionUpdateInterval:updateInterval];<br/>
CMDeviceMotionHandler motionHandler = ^(CMDeviceMotion *motion, NSError *error) {<br/>
[self processMotion:motion withError:error];<br/>
};<br/><br/>
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:motionHandler];
Это работает, но интервал обновления не ведет себя какожидается.Я удалил весь код выполнения в методе processMotion, за исключением сохранения временных меток, чтобы увидеть реальную частоту обновления движения.Я проверил это достаточно, чтобы доказать себе, что это повторяется, даже странный результат для 1/40.В таблице ниже показано, что я вижу:
updateInterval actual events per second
1.0/20.0 13
1.0/30.0 27
1.0/40.0 27
1.0/50.0 34
1.0/60.0 40
1.0/70.0 57
1.0/90.0 60
1.0/100.0 74
Некоторые примечания:1. Я уверен, что интервал обновления установлен правильно, и проверил его после настройки для подтверждения.2. Я уверен, что я отслеживаю каждый вызов processMotion, нет никаких звонков, сделанных с nil CMDeviceMotion или другой странностью3. Я не занимаюсь какой-либо значительной обработкой, которая бы блокировала вещи, просто ожидал события движения и записывал их.Все это работало как делегат акселерометра.4. Данные о движении хорошие, слишком редко обновляются :)5. это использует ios 4.2 на ipod touch 4-го поколения6. Я искал как мог, не видел объяснений, хотя я видел некоторые сообщения о людях, которые видели частоту обновления 50 Гц при запросе 60 Гц, что может быть связано.
Следующее, что я попробую, это настроить выделенную очередь для обработки вместо использования текущей очереди, однако я хотел посмотреть, было ли это известным поведением.Я мог понять, была ли скорость обновления как-то узким местом, но не уверен, почему она все равно будет увеличиваться, как показано, если это так.Опять же, я полагаю, что я мог бы перестроить, чтобы использовать NSTimer и сделать свой собственный опрос, но я хотел бы понять, почему я вижу это, на случай, если я в корне неправильно понимаю структуру Core Motion.