在UIAccelerometer
被iOS弃用之前,我使用了x
, y
和z
的数据来计算俯仰,滚转和偏航。我还必须做一些过滤,但现在我看到,与CoreMotion
库,我可以从CMAttitude
类获得这些数据,并真的想使用这些属性,但不知何故,我没有这样做。
现在我所做的就是实例化
CMMotionManager *motionManager;
CMDeviceMotion *deviceMotion;
CMAttitude *attitude;
...
deviceMotion = motionManager.deviceMotion;
attitude = deviceMotion.attitude;
motionManager.accelerometerUpdateInterval = 0.065; // 65ms
[motionManager startAccelerometerUpdates];
我能够从motionManager.accelerometerData.acceleration.<x,y or z>
读取x,y和z,但试图从attitude.<roll,pitch,yaw>
读取给我0。
NSLog(@"Roll: %f", attitude.roll); // = 0
我在一个连续计时器每100ms触发一次的方法中读出值。
你知道我错过了什么吗?
为了使用deviceMotion.attitude
,您必须调用[motionManager startDeviceMotionUpdates]
。
startAccelerometerUpdates
只提供加速度计数据,就像startGyroUpdates
会给你gyroData
一样。请注意,设备运动数据不仅仅是加速度计和陀螺仪数据,因为它们两者将结合在一起(传感器融合)以实现更高的精度。