将CMAttitude与CMCalibratedMagneticField结合使用

时间:2013-11-13 21:11:53

标签: ios iphone gyroscope core-motion

我想知道如何使用Core Motion获得相对于基本方向的iphone方向。我认为最好的方法是使用设备的姿态来测量磁力计给出的磁场。从应用文档中,它将态度描述为:

CMAttitude对象表示态度的度量 - 即身体相对于给定参照系的方向。

我想知道如何将这个“给定的参考框架”作为主要方向。也许通过使用CMCalibratedMagneticField?

任何人都可以告诉我该怎么做或者更方便的替代路线。

1 个答案:

答案 0 :(得分:2)

我不是100%确定这是否是您正在寻找的,但您可以使用CMAttitudeReferenceFrameXMagneticNorthZVertical参考框架从运动管理器获取设备姿态值,如下所示。此代码将转储设备的态度,每秒记录30次。如果在我看来,偏航值朝向东方约为0,并且向两个方向延伸180度,正值为逆时针,负值为顺时针。

- (void)startMonitoring
{
    if (!self.motionManager) {
        self.motionManager = [CMMotionManager new];

        [self.motionManager setDeviceMotionUpdateInterval:1.0 / 30.0];
    }

    NSOperationQueue *currentQueue = [NSOperationQueue currentQueue];

    [self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXMagneticNorthZVertical
                                                            toQueue:currentQueue
                                                        withHandler:^(CMDeviceMotion *motion, NSError *error) {
                                                            NSLog(@"%@",motion.attitude);
    }];
}