Core Motion
处理加速计、陀螺仪、计步器和环境相关事件的框架。
概览
CoreMotion 会报告来自于iOS硬件设备的运动数据和环境数据,包括加速计和陀螺仪还有计步器、磁力计、气压力计。您可以使用此框架访问硬件当前生成的数据,然后在App中使用。例如游戏可能会使用陀螺仪和加速计来控制屏幕上的行为。比如我们可能都玩过用手机把一个小球稳定在某一个点。
重要的是这些值苹果有给我们处理了一个比较合理的值,例如一个经过处理的加速度计值只反映用户造成的加速度,而不是重力加速度。当然也可以访问原始值。通常我们会使用 DeviceMotion 这是苹果给我们处理了一个返回的对象。
ps:iOS 10 之后的设备有些特定的传感器必须在 info.plist 里包含使用说明例如访问健康相关,未能添加将导致崩溃
综上所有传感器,此篇文章将说明DeviceMotion获取的复合数据:
获取陀螺仪事件:
从硬件接收事件
概览
陀螺仪会测量硬件设备围绕空间坐标轴旋转的角度,iOS设备上基本上都有一个三轴陀螺仪,如图,旋转值以给定轴周围的弧度每秒为单位。根据旋转的方向给定值有可能是正数或负数
使用:
可以使用CoreMotion 框架访问陀螺仪数据。具体就是CMMotionManager类提供了启用陀螺仪硬件的接口,需要注意启动之前要检查陀螺仪是否可用有个属性 isGyroAvailable已验证陀螺仪是否可用。
有两种方式可以获得值:第一种主动获取第二种要求框架定期向应用程序推送更新。通过实际编码发现都是需要定时器,只不过主动获取需要我们自己定义定时器稍后从代码体现。
1、获取原始值
2.利用DeviceMotion实现一些小功能
注意DeviceMotion.gravity 返回的值范围值 -1 --- 1 用(三个点)来表示当前运动三维坐标
这里写下一个我的疑惑:刚开始看到加速计和陀螺仪是感觉他们从原理上没有任何区别,后来通过搜索发现:加速计只能侦测物体的移动行为并不具备精确侦测物体角度改变的能力。而陀螺仪可以侦测物体的水平改变的状态,但无法计算物体移动的激烈程度。也搜了一下现在飞机上面也都是用陀螺仪和加速计复合计算航线、角度等这里还学到了一个新函数atan2()感兴趣的可以看下
<u>https://blog.csdn.net/zaijianbali/article/details/40685465?_t=t</u>