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开发的作品,通过苹果官方审批后,如果作品本身品质优秀,苹果官方很有可能会协助开发者一起推广
 
 
 

你可能感兴趣的:(core)