2013-04-04 4 views
1

Мне удалось получить заголовок компаса с помощью CLLocationManager, но поскольку мое приложение уже использует CMMotionManager, я бы хотел измерить заголовок, используя исключительно CMMotionManager.CMMotionManager - получение заголовка с использованием только CMMotionManager

Как и вся ясная документация Apple, вы должны угадать, как использовать их API.

Я попытался использовать это, чтобы измерить заголовок

[self.motionManager setMagnetometerUpdateInterval:1.0/30.0]; //30 Hz 

[self.motionManager startMagnetometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMMagnetometerData *magnetometerData, NSError *error) { 
    CMMagneticField compass = magnetometerData.magneticField; 
    NSLog(@"x: %f y:%f z:%f", compass.x, compass.y, compass.z); 
}]; 

проблема заключается в том, что этот блок работает всего несколько секунд, после чего перестают работать.

Есть ли какой-нибудь пример того, как измерять заголовок с помощью CMMotionManager?

спасибо.

+0

Вы ссылаетесь на self.motionManager сильно? – daltonclaybrook

+0

да, почему ???????? – SpaceDog

ответ

0

Если вы этого не сделаете, я бы порекомендовал использовать [NSOperationQueue mainQueue] вместо currentQueue. Как правило, вы вызываете currentQueue только из операции, чтобы получить ссылку на очередь, которая запустила его.

0

Я бы предположил, что вы не позвонить по телефону start...UpdatesToQueue:withHandler:. Это требует использования фонового потока и может быть очень сложным для управления. Вероятно, вы просто замаскируете все на основной поток. Это передовая техника, и вам это не нужно.

Вместо этого просто start, а затем используйте NSTimer или аналогично опросу CMMotionManager.

1

По-видимому, лучший способ сделать это - использовать CoreLocation, пока Apple не создаст достойную документацию.

Смежные вопросы