免费开源的iOS开发学习平台

CoreMotion框架:1-基本介绍

目前市面上的iOS设备都配备了运动传感器,能够获取设备的加速度以及角速度,而运动传感器的引入,也为用户交互带来了新的体验,比如很多游戏(如赛车类游戏)就是与iOS设备的运动传感器结合起来,从而实现很多新奇的玩法。为了更加方便开发者使用设备上的传感器,苹果带来了CoreMotion框架,基于该框架,可以非常快捷的获取设备当前传感器的各个数值。

运动传感器的常见用途

iOS设备中的运动传感器被广泛应用于游戏类应用以及导航类应用中,例如,在地图类应用中,选择步行模式,就可以通过手机当前的方向来判断行走的方向。又如我们常见的赛车类游戏以及跑酷类游戏中,也可以通过摇动手机来改变汽车以及游戏人物的运动方向。

iOS设备中的运动传感器

在iOS设备中,存在3种传感器:加速计(Accelerometer)、陀螺仪(Gyroscope)以及磁力计(magnetometer)。

  • 陀螺仪(Gyroscope、GYRO-Sensor): 也叫地感器,传统结构是内部有个三轴陀螺,如下图所示。三轴陀螺仪的工作原理是通过测量三维坐标系内陀螺转子的垂直轴与设备之间的夹角,并计算角速度,通过夹角和角速度来判别物体在三维空间的运动状态。三轴陀螺仪可以同时测定上、下、左、右、前、后等6个方向(合成方向同样可分解为三轴坐标),最终可判断出设备的移动轨迹和加速度。

  • 加速计(Accelerometer、G-Sensor): 也叫重力感应器,实际上是可以感知任意方向上的加速度(重力加速度则只是地表垂直方向加速度)。加速计通过测量组件在某个轴向的受力情况来得到结果,表现形式为轴向的加速度大小和方向(XYZ),这一点又有点类似于陀螺仪,但陀螺仪的更多关注自身旋转情况(原位运动),加速计则主要是测量设备的受力情况,也就是三轴运动情况,尽管加速计也可以在某个小范围换算出角速度,但设计原理决定似乎更适合于空间运动判断。

  • 磁力计(Magnetic、M-Sensor): 也叫地磁、磁感器,可用于测试磁场强度和方向,定位设备的方位,磁力计的原理跟指南针原理类似,可以测量出当前设备与东南西北四个方向上的夹角。

综上所述,陀螺仪知道“我们转了个身”,加速计知道“我们又向前走了几米”,而磁力计则知道“我们是向西方向”的。

CoreMotion框架简介

为了更加方便开发者获得iOS设备运动传感器的数值,苹果提供了CoreMotion框架。通过CoreMotion框架,开发者不仅可以直接获取陀螺仪、加速计以及磁力计的数值,并且还对这些传感器的数值进行了一些加工,主要体现在对传感器数值进行了数学方面的处理。加工后的数据对于开发者来说,更加具有使用价值。

Core Motion框架包含有一个专门的CMMotionManager类,由这个manager去管理和运动相关的数据封装类。一个app可以接收4种设备的运动数据:

  • 加速计数据

  • 陀螺仪数据

  • 磁力计数据

  • DeviceMotion数据(处理后的数据)

Pull模式与Push模式

CoreMotionManager类能够获取到设备的所有运动数据(motion data),Core Motion框架提供了两种对motion数据的操作方式,一个是”pull”,另一个是”push”。其中”pull”方式能够以CoreMotionManager的只读方式获取当前任何传感器状态或是组合数据。”push”方式则是以块或者闭包的形式收集到开发者希望得到的数据并且会在特定周期内得到实时的更新。

苹果官方也对Pull模式以及Push模式进行了对比,并且对于各自的使用场景给了一些建议。其中,Push模式更加适合需要实时采集传感器数据的应用,例如:数据采集类应用,而Pull模式适合绝大多数应用,一般来说,推荐用Pull模式。