之前已经问过这个问题 CMCalibratedMagneticField doesn't update 但它没有得到真正的回答。我很失落这个。
我使用的是简单的公式,但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>
但那是其他的东西。
任何帮助将不胜感激!
蒂姆雷德菲尔德答案 0 :(得分:2)
请改为尝试:
- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame
toQueue:(NSOperationQueue *)queue
withHandler:(CMDeviceMotionHandler)handler
以下任何一项:
CMAttitudeReferenceFrameXArbitraryCorrectedZVertical
CMAttitudeReferenceFrameXMagneticNorthZVertical
CMAttitudeReferenceFrameXTrueNorthZVertical
但不是:
CMAttitudeReferenceFrameXArbitraryZVertical
(你错过的另一个问题:CoreMotion - magneticField is always 0)
如果你想了解磁力计数据的太多信息,请参阅我对这个问题的回答:In iOS, what is the difference between the Magnetic Field values from the Core Location and Core Motion frameworks?