CMCalibratedMagneticField
始终返回0
。
CMAcceleration
返回值,CMMagnetometerData
也返回值。
只有CMCalibratedMagneticField
没有,我需要它,因为它是没有偏见的磁场。
我在iPhone 4S上测试。
[MotionManager startDeviceMotionUpdatesToQueue:deviceQueue
withHandler:^(CMDeviceMotion *motion, NSError *error) {
CMCalibratedMagneticField f = motion.magneticField;
//CMMagneticField t = motion.;
//CMAcceleration s = motion.gravity; Works!
//_xlabelnew.text = [NSString stringWithFormat:@"%f", s.x];
_xlabelnew.text = [NSString stringWithFormat:@"%f", f.field.x];
_ylabelnew.text = [NSString stringWithFormat:@"%f", f.field.y];
_zlabelnew.text = [NSString stringWithFormat:@"%f", f.field.z];
//_totallabelnew.text = [NSString stringWithFormat:@"%f", sqrt(f.field.x*f.field.x + f.field.y*f.field.y + f.field.z*f.field.z)];
}];
答案 0 :(得分:3)
您检查过磁力计的准确度吗?我的猜测是你对motion.magneticField.accuracy的值是-1(未校准)。不幸的是我不知道为什么会这样。即使磁力计工作得很好,我的iPhone 4也是如此。
我能想到的唯一一件事就是手机在出厂前从未校准过,但这对我的4号比4S更有意义。校准的字段功能是iOS 5.0的新功能,于2011年10月公开发布,其中iPhone 4在一年前发布。但是你的手机和5.0一样出现了,所以人们会认为发布的硬件与它支持的软件功能相匹配。再一次,只是猜测。对不起,我无法提供更多帮助。希望你会找到一个真正的答案。我只是打算自己校准磁力计。
飞思卡尔提供了一个免费的工具。该软件(以及一些有用的文档)可在此处获得。您可能需要创建一个免费帐户才能下载它,但我不记得了。
http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=eCompass
更新:我收到了iPhone 5并且CMCalibratedMagneticField工作正常。
答案 1 :(得分:0)
[MotionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical toQueue:deviceQueue
withHandler:^(CMDeviceMotion *motion, NSError *error) {
CMCalibratedMagneticField f = motion.magneticField;
//CMMagneticField t = motion.;
//CMAcceleration s = motion.gravity; Works!
//_xlabelnew.text = [NSString stringWithFormat:@"%f", s.x];
_xlabelnew.text = [NSString stringWithFormat:@"%f", f.field.x];
_ylabelnew.text = [NSString stringWithFormat:@"%f", f.field.y];
_zlabelnew.text = [NSString stringWithFormat:@"%f", f.field.z];
//_totallabelnew.text = [NSString stringWithFormat:@"%f", sqrt(f.field.x*f.field.x + f.field.y*f.field.y + f.field.z*f.field.z)];
}];