Я еще не использовал iOS 5, но уже в 4.x UIAccelerometer и UIAccelerometerDelegate были заменены платформой CoreMotion. Он более сложный, учитывает сигналы гироскопа и выполняет объединение датчиков, то есть выполняет калибровку для вас, например, вычисление смещения.
По сути, обратный вызов блока CMDeviceMotionHandler теперь эквивалентен. Он называется каждые deviceMotionUpdateInterval секунд или вы можете пойти с вашим собственным циклом таймера и получить данные. Это довольно просто и легко в использовании. Посмотрите на Простое обнаружение движения iPhone и перейдите по трем ссылкам на документы SDK.
Есть три вещи, которые вы должны иметь в виду:
- Для работы с Device Motion требуется версия iPhone> = 4 или новейшее поколение iPod touch, поскольку оно опирается на поддержку гироскопа
- При использовании Device Motion вы не должны использовать низкочастотную фильтрацию для извлечения гравитации, потому что это сделано для вас
- Если вы хотите поддерживать устаревшее оборудование, вам придется работать с необработанными данными. Это делается путем создания CMAccelerometerHandler и вызова startAccelerometerUpdatesToQueue: withHandler: . Затем вы должны извлечь гравитацию с помощью фильтрации нижних частот, как в didAccelerate