Если вы действительно хотите использовать необработанные несмещенные данные датчика, вы должны установить интервал обновления каждого датчика независимо, хотя они часто будут иметь одно и то же значение:
motionManager.gyroUpdateInterval = myGyroInterval;
motionManager.accelerometerUpdateInterval = myAccelerometerInterval;
deviceMotionUpdateInterval
привязан ктолько движения устройства.
Большинство людей не хотят обрабатывать данные датчика с помощью фильтра Калмана и т. д., а только текущую ориентацию устройства.Если это так, взгляните на Простое обнаружение движения iPhone .
Единственная ситуация, когда я видел значения методов xxxActive CMMotionManager, которые не сообщали о правильном состоянии, - приложение в фоновом режимеи активировать его снова, когда обработка движения выполняется в собственном NSThread.Я думаю, что это связано с некоторыми действиями операционной системы, которые могут сочетаться с условиями гонки.Хитрость заключается в том, чтобы освободить экземпляр CMMotionManager и выделить новый.