我一直在试验 CMDeviceMotion,尤其是 startDeviceMotionUpdatesUsingReferenceFrame。其中的磁场值对我来说似乎不正确。
例如,如果我这样做:
CMDeviceMotion *manager = [[CMDeviceMotion alloc] init];
manager.deviceMotionUpdateInterval = 0.1;
[manager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical toQueue:queue withHandler:^(CMDeviceMotion *motion, NSError *error) {
CMMagneticField fld = motion.magneticField.field;
NSLog( @"%5.1f %5.1f %5.1f", fld.x, fld.y, fld.z );
[self handleDeviceMotion:manager.deviceMotion];
}];
它显示了一个大小约为 50 的磁场矢量,但几乎与重力对齐。也就是说,当设备平放在桌子上时,x 和 y 接近于零,z 接近 -50,与我如何旋转设备无关。
50 在地球磁场的大小上是正确的(根据维基百科,应该在 25 到 65 微特斯拉之间),但矢量的方向似乎完全错误。我想知道是否:
- 仅在我所在的位置(瑞典斯德哥尔摩)是特殊的,或者
- 磁场属性显示没有地球磁场的剩余磁场,或
- 这是错误
你对磁场属性有类似的经历吗?