加速计 & 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. PAT甲题题解-1091. Acute Stroke (30)-BFS

    题意:给定三维数组,0表示正常,1表示有肿瘤块,肿瘤块的区域>=t才算是肿瘤,求所有肿瘤块的体积和 这道题一开始就想到了dfs或者bfs,但当时看数据量挺大的,以为会导致栈溢出,所以并没有立刻写 ...

  2. LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS

    LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...

  3. POI操作Excel(xls、xlsx)

    阿帕奇官网:http://poi.apache.org/ POI3.17下载:http://poi.apache.org/download.html#POI-3.17 POI操作Excel教程(易百教 ...

  4. [2017BUAA软工]结对项目-数独程序扩展

    零.github地址 GitHub地址:https://github.com/Liu-SD/SudoCmd (这个地址是命令行模式数独的仓库,包含了用作测试的BIN.DLL核心计算模块地址是:http ...

  5. Xdebug原理

    前言: 前面一篇博文记录了Xdebug的安装配置.配置使用起来相对简单易懂,那么Xdebug的实现原理又是如何呢?所以就找了些资料来理解下其中的原理. 内容: Xdebug工作原理 1,IDE(如Ph ...

  6. node之post提交上传

    post文件上传 multer 中间件 在node中 express为了性能考虑采用按需加载的方式,引入各种中间件来完成需求, 平时解析post上传数据时候,是用body-parse.但这个中间件有缺 ...

  7. django学习--2 模板

    Django 模板 在上一章节中我们使用 django.http.HttpResponse() 来输出 "Hello World!".该方式将数据与视图混合在一起,不符合 Djan ...

  8. OneZero第四周第四次站立会议(2016.4.14)

    1. 时间: 15:00--15:10  共计10分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...

  9. linux虚拟机安装中出现的问题

    当虚拟机加载镜像时,出现下面的错误: vmware 已将该虚拟机配置为使用 64 位客户机操作系统.但是,无法执行 64 位操作. 错误提示:已将该虚拟机配置为使用 64 位客户机操作系统.但是,无法 ...

  10. 学习 TTreeView [1] - TTreeNodes、TTreeNode 与 Items、Items.Count、Items.Clear

    填写 TTreeView 的内容一般是这样开始的(下图), 不过我觉得最好习惯用动态建立. 打个比方: 譬如 TreeView 是一个军营的"营部"! 这里会有营长.连长.排长.班 ...