1

在CMCalibratedMagneticField 没有更新之前已经提出了这个问题, 但没有得到真正的回答。我对这个很迷茫。

我使用了一个简单的公式,但 field.field.x、y、z 始终为零。

if (motionManager.deviceMotionAvailable)
{
    [motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]  
                                       withHandler:
       ^(CMDeviceMotion *motionData, NSError *error) {
           CMCalibratedMagneticField field = motionData.magneticField;
           NSLog(@"x: %f  y:%f  z:%f", field.field.x
                                     , field.field.y
                                     , field.field.z);

    }];       
}

样本输出为

2013-07-14 22:18:27.865 TestApp[6678:907] x: 0.000000  y:0.000000  z:0.000000

2013-07-14 22:18:27.869 TestApp[6678:907] x: 0.000000  y:0.000000  z:0.000000

2013-07-14 22:18:27.879 TestApp[6678:907] x: 0.000000  y:0.000000  z:0.000000

我很确定问题不在于前面的答案所建议的电话:我正在为相当现代的 4S 编码。我有 CoreMotion、CoreLocation 和 CoreData 框架——也许有一个我不知道我需要在实现中导入的头文件?目前我似乎只需要

#import <tgmath.h>

但那是其他东西。

任何帮助,将不胜感激!

蒂姆·雷德菲尔德

4

1 回答 1

2

试试这个:

- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame 
                                            toQueue:(NSOperationQueue *)queue 
                                        withHandler:(CMDeviceMotionHandler)handler

与任何:

     CMAttitudeReferenceFrameXArbitraryCorrectedZVertical  
     CMAttitudeReferenceFrameXMagneticNorthZVertical  
     CMAttitudeReferenceFrameXTrueNorthZVertical  

但不是:

     CMAttitudeReferenceFrameXArbitraryZVertical

(您错过的另一个 SO 问题:CoreMotion - magneticField is always 0

如果您想了解有关磁力计数据的太多信息,请参阅我对这个问题的回答:在 iOS 中,Core Location 和 Core Motion 框架中的磁场值有什么区别?

于 2013-07-15T01:02:25.617 回答