iOS之设备方向与动作方向

加速计物理特性

iOS设备内的加速计是个三轴元件,能够检测到三维空间中的运动或重力。也就是说,加速计不但可以指示用户握持设备的方式(同自动旋转功能),而且可以指示设备是否被放在桌子上,甚至指示正面朝上还是朝下。加速计可以测量重力。加速计返回值为1.0时,表示在特定方向上感知到的重力是1g。

  • 静止握持设备,没有任何运动,地球引力对其施加的力大约为1g
  • 纵向竖直地握持,那么设备会检测并报告在其y轴上的力大约为1g
  • 如果以一定角度握持,那么1g的力会分布到不同的轴上,这取决于握持的方式。在以45度角握持时,1g的力会均匀地分解到两个轴上。

如果检测到的加速计值远大于1g,那么可以判断这是突然运动。正常使用时,加速计在任一轴上都不会检测到大于1g的值。如果摇动、投掷或设备坠落,那么加速计便会在一个或多个轴上检测到很大的力。

陀螺仪旋转特性:

iOS设备都有一个陀螺仪传感器,可用于读取描述设备围绕其轴旋转的值。如果保持手机平方的同时旋转它,加速计的值不会改变。这时因为让手机移动的力没有改变。但是,在相同的运动过程中,设备的旋转值将改变,具体来讲,就是z轴的旋转值将改变。顺时针旋转设备将生成负值,逆时针旋转它将生成正值。停止旋转后,z轴旋转值将恢复为0。

Core Motion 和动作管理器

Core Motion框架提供了CMMotionManager类,该类提供的数据可以用来描述用户如何移动设备。该类的实例可以在动作发生时执行一些代码;也可以时刻监视一个持续更新的结构,使我们能够随时访问最新的值。

CMMotionManager类实际上不是一个单例,但应用程序应该将它视为单例。我们应该仅为每个应用创建一个CMMotionManager实例。