iOS内置加速计(UIAccelerometer/CoreMotion)


•通过iOS设备提供的内置的加速计,可以确定设备什么时候移动、移动了多少距离以及设备的方向

•在应用程序中,使用UIAccelerometer类来接收加速计数据,通过类方法sharedAccelerometer可以获得该类的实例

•使用加速计需要设置其更新间隔和代理,此后,在指定的时间间隔,会收到代理方法accelerometer:didAccelerate:的回调

•该代理方法收到一个指向加速计的指针和一个指向UIAcceleration对象的指针

•该加速对象包含:x,y,z和timestamp四个属性,其中x,y,z是设备在这三个方向上的重力加速度,单位g

iOS内置加速计(UIAccelerometer/CoreMotion)_第1张图片
iOS内置加速计(UIAccelerometer/CoreMotion)_第2张图片

Vt=V0+g * t  加速度是恒定的

Vt=V0+g+g+g+g…… 时间和加速度都是恒定的

手机上面,加速度不是恒定的,取决于我们晃动手机的倾斜度

 Vt=V0+a1+a2+a3+a4…. 时间是恒定的,加速度会改变

–引入QuartzCore.framework方法

–定义CADisplayLink游戏时钟,并在游戏时钟指定的更新方法中更新小球视图位置

效果自己去真机测试

•加速计使用步骤

–1. 获取共享加速计对象

–2. 设置加速计数据更新频率

–3. 设置加速计对象代理

•让加速计负责速度更新,CADislpayLink负责界面更新的好处

–1. 游戏效果更加平滑

–2. 界面表示和游戏逻辑可以得到拆分,便于游戏扩展并引入MVC设计模式

–3. 使用时钟更新,需要注意小球位置的修正

•UIAccelerometer虽然已经停止更新,但是目前还是有一定数量的应用中使用到了该技术

iOS内置加速计(UIAccelerometer/CoreMotion)_第3张图片
代理方法
iOS内置加速计(UIAccelerometer/CoreMotion)_第4张图片
碰撞检测
iOS内置加速计(UIAccelerometer/CoreMotion)_第5张图片

•在iOS4之前,加速度计由UIAccelerometer类来负责采集工作,而电子罗盘则由Core Location接管

•随着iPhone4的推出,由于加速度计的升级以及陀螺仪的引入,与Motion相关的编程成为重头戏,所以,苹果在iOS4中增加了一个专门负责该方面处理的框架——Core Motion Framework

•Core Motion不仅能够提供实时的加速度值和旋转速度值,更重要的是,苹果在其中集成了很多算法,可以直接输出把重力加速度分量剥离的加速度,省去你的高通滤波操作,以及提供给你一个专门的设备的三维attitude信息

Core Motion 框架结构示意图 —— MotionManager

iOS内置加速计(UIAccelerometer/CoreMotion)_第6张图片

•Push(采集所有数据——做运动仿真更好)

Pull(在需要是获取采样数据)
iOS内置加速计(UIAccelerometer/CoreMotion)_第7张图片

•使用加速计可以测量设备在x,y,z三个轴上的加速度

•利用加速计可以设计制作出用户交互体感非常优秀的游戏作品!

•UIAccelerometer由于重力分量的干扰已经被苹果废弃,不过由于其使用简单,目前还有不少游戏作品中使用这一技术

•CoreMotion是苹果公司针对运动特性新推出的一套框架,经过巧妙的构思可以非常优秀的作品,而且很容易抓住用户的眼球

使用CoreMotion开发的作品,通过苹果官方审批后,如果作品本身品质优秀,苹果官方很有可能会协助开发者一起推广

你可能感兴趣的:(iOS内置加速计(UIAccelerometer/CoreMotion))