1

我已经设法使用 CLLocationManager 获得指南针航向,但因为我的应用程序已经使用了 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 测量航向?

谢谢。

4

3 回答 3

1

显然,最好的方法是使用 CoreLocation,直到 Apple 创建体面的文档。

于 2013-04-05T03:25:35.853 回答
0

我建议你不要打电话start...UpdatesToQueue:withHandler:。这需要使用后台线程,并且管理起来非常棘手。你可能只是在主线程上把所有东西都搞砸了。这是一种先进的技术,你不需要它。

相反,只需start然后使用 NSTimer 或类似方法重复轮询 CMMotionManager。

于 2013-04-04T19:17:37.777 回答
0

在没有实际尝试的情况下,我建议使用[NSOperationQueue mainQueue]而不是 currentQueue。通常,您仅在操作中调用 currentQueue 以获得对启动它的队列的引用。

于 2013-04-04T19:12:24.580 回答