加速计 & CoreMotion


加速计 & CoreMotion

Fullscreen

 

iOS中的主要传感器 • 接近传感器

• 加速度传感器--又称加速计

  • -   由于更够带来了更多的直觉游戏体验,基本姿态识别和环境

     感知功能,目前在智能手机上应用的非常广泛 
  • -   目前智能手机中基本配备的都是三维线传感器,也就是说,

    用来测量x,y,z三个轴上的加速度

  • -   由于重力分量的干扰,无法仅仅依靠加速度传感器来检测加

     速方向的角度,也无法得知手机本身的朝向 

    • 陀螺仪
    - 造价昂贵,目前并未在智能手机中得到普及
    - 基于角动量守恒理论,沿着某个特定的坐标轴测量旋转速率 - 误差会累积

    • 电子罗盘--又称磁力计,或电子指南针

iOS中的主要传感器

 

加速度传感器

电子罗盘

陀螺仪

接近传感器

功能

通过测量三个 轴的加速度大 小来判断人体 运动

通过测量设备 周围地磁场的 强度和方向来 判断朝向

通过测量三个 轴的旋转速率 来判断朝向

无须物理接触 就判断附近物 体的存在

主要局限性

受重力干扰大 瞬时误差大

误差大,容易 受其他磁场和 金属物体影响 主要用于校正 其他设备

误差会累积 长时间读数的 准确性差

不通用,大多 数只针对几种 材质

应用

活动测量

导航

导航

智能省电

,, 。

加速计

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

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

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

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

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

加速计坐标系--注意y轴的方向

加速计开发测试需要注意

• 加速计的应用只能在真机上开发测试

加速计演练

• 演练1
- 在加速计回调方法中更新小球视图位置,运行并测试

效果 • 演练2

- 引入QuartzCore.framework方法
- 定义CADisplayLink游戏时钟,并在游戏时钟指定的更新

方法中更新小球视图位置
- 运行并对比两种方式的实现效果

加速计演练小结

• 加速计使用步骤
- 1. 获取共享加速计对象 
- 2. 设置加速计数据更新频率 - 3. 设置加速计对象代理

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

  • -   1. 游戏效果更加平滑

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

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

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

CoreMotion框架 
• 在iOS4之前,加速度计由UIAccelerometer类来负责采集工作,而电子

罗盘则由Core Location接管

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

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

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

Core Motion获取数据的两种方式

• Push(采集所有数据--做运动仿真更好) • Pull(在需要是获取采样数据)

Core Motion Push演练

• Core Motion Push使用步骤
- 1. 实例化Motion管理器 
- 2. 判断传感器是否可用 
- 3. 设定传感器数据更新频率 
- 4. 启动传感器更新,Push方式更新数据

增加新的功能

• 点击屏幕停止或者启动加速计数据采集

使用dispatch_once创建MotionManager的单例

• 好处:
- 线程安全

- 很好满足静态分析器要求 
- 和自动引用计数(ARC)兼容      - 仅需要少量代码

• 使用方法,在AppDelegate中定义

@property (strong, nonatomic, readonly)CMMotionManager *sharedMotionManger;!

调整代码

• 从AppDelegate中获得共享运动管理器

- 1. 获得AppDelegate的引用

- 2. 通过AppDelegate的引用获得其中只读的 sharedMotionManager对象引用

回顾

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

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

    作品!

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

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

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

© chenyilong. Powered by Postach.io

 

加速计 & CoreMotion的更多相关文章

  1. 传感器- 加速计 - CoreMotion

    /** *  CoreMotion * */ #import "ViewController.h" #import <CoreMotion/CoreMotion.h> ...

  2. CoreMotion(加速计)

    加速计的作用 用于检测设备的运动(比如摇晃) 加速计的经典应用场景 摇一摇 计步器 ********************************** Core Motion获取数据的两种方式 pu ...

  3. iOS开发-CoreMotion框架(加速计和陀螺仪)

    CoreMotion是一个专门处理Motion的框架,其中包含了两个部分加速度计和陀螺仪,在iOS4之前加速度计是由UIAccelerometer类来负责采集数据,现在一般都是用CoreMotion来 ...

  4. iFIERO - (二)宇宙大战 Space Battle -- SpriteKit 无限循环背景Endless、SpriteKit物理碰撞、CoreMotion加速计

    本节主要讲解如何创建无限循环Endless的星空背景(如下图).玩家飞船发射子弹,监测子弹击外星敌机的SpriteKit物理碰撞并消灭敌机,以及应用iOS的CoreMotion加速计移动飞船躲避外星敌 ...

  5. iOS开发 传感器(加速计、摇一摇、计步器)

    一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...

  6. iOS开发——高级篇——传感器(加速计、摇一摇、计步器)

    一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...

  7. iOS新加速计事件(陀螺仪和加速计)

    iOS新加速计事件 [iOS新加速计事件] 1.iOS5.0以前,可以使用UIAcceleration来监听加速计事件. 2.Bug iOS5.0以后,UIAccelerometerDelegate已 ...

  8. ios开发——实用技术篇Swift篇&加速计和陀螺仪

    加速计和陀螺仪 //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnim ...

  9. 10 - 应用程序间通信、本地通知、加速计、URL传输中文

    一.应用间通信 URL 调用系统服务: tel:11111 sms:xxx@163.com http:// URL深入 类型://主机:端口/地址?参数 label框等于文字大小快捷键:command ...

随机推荐

  1. 微软职位内部推荐-Senior PM

    微软近期Open的职位: Senior Product Manager My Life & Work Beijing China Our passion is to enable people ...

  2. Mocha 单元测试框架简介

    前言: mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行. 使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运 ...

  3. 结对&词频统计

    结对编程 Pathner 濮成林(博客:http://www.cnblogs.com/charliePU/) 1.词频统计 环境依赖: 开发环境.myeclipse 2013, jdk1.7.0_04 ...

  4. 《Linux内核分析》第五周

    20135103王海宁 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这周的实验在上周实验四的基础上, ...

  5. android开发心得之知识的量变到质变

    随着身边越来越多的人开始了尝试android开发,看着他们一点点学期 从nodepad++写代码 cmd 执行,到安装eclipse 和android SDK,仿佛看到了昨天的我一样,一样勤勤恳恳的学 ...

  6. [转帖]Portainer -- Docker可视化管理工具的安装配置及使用

    原贴地址:https://blog.csdn.net/A632189007/article/details/78779920 Portainer介绍 Portainer是Docker的图形化管理工具, ...

  7. poj2991 Crane(线段树)

    Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...

  8. BZOJ3881 Coci2015Divljak(AC自动机+树上差分+树状数组)

    建出AC自动机及其fail树,每次给新加入的串在AC自动机上经过的点染色,问题即转化为子树颜色数.显然可以用dfs序转成序列问题树状数组套权值线段树解决,显然过不掉.事实上直接树上差分,按dfs序排序 ...

  9. MT【111】画图估计

    评:此类方程是超越方程,一般情况下无法解出具体的解,常见手段:1.画图  2.猜根.此处可以取特殊值a=2.5,b=3.5,容易知道此时$x=2.5\in(2,3)$

  10. 【刷题】BZOJ 4176 Lucas的数论

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...