加速计 & CoreMotion
加速计 & CoreMotion
加速计 & CoreMotion

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开发的作品,通过苹果官方审批后,如果 作品本身品质优秀,苹果官方很有可能会协助开发者一起 推广!
加速计 & CoreMotion的更多相关文章
- 传感器- 加速计 - CoreMotion
/** * CoreMotion * */ #import "ViewController.h" #import <CoreMotion/CoreMotion.h> ...
- CoreMotion(加速计)
加速计的作用 用于检测设备的运动(比如摇晃) 加速计的经典应用场景 摇一摇 计步器 ********************************** Core Motion获取数据的两种方式 pu ...
- iOS开发-CoreMotion框架(加速计和陀螺仪)
CoreMotion是一个专门处理Motion的框架,其中包含了两个部分加速度计和陀螺仪,在iOS4之前加速度计是由UIAccelerometer类来负责采集数据,现在一般都是用CoreMotion来 ...
- iFIERO - (二)宇宙大战 Space Battle -- SpriteKit 无限循环背景Endless、SpriteKit物理碰撞、CoreMotion加速计
本节主要讲解如何创建无限循环Endless的星空背景(如下图).玩家飞船发射子弹,监测子弹击外星敌机的SpriteKit物理碰撞并消灭敌机,以及应用iOS的CoreMotion加速计移动飞船躲避外星敌 ...
- iOS开发 传感器(加速计、摇一摇、计步器)
一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...
- iOS开发——高级篇——传感器(加速计、摇一摇、计步器)
一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...
- iOS新加速计事件(陀螺仪和加速计)
iOS新加速计事件 [iOS新加速计事件] 1.iOS5.0以前,可以使用UIAcceleration来监听加速计事件. 2.Bug iOS5.0以后,UIAccelerometerDelegate已 ...
- ios开发——实用技术篇Swift篇&加速计和陀螺仪
加速计和陀螺仪 //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnim ...
- 10 - 应用程序间通信、本地通知、加速计、URL传输中文
一.应用间通信 URL 调用系统服务: tel:11111 sms:xxx@163.com http:// URL深入 类型://主机:端口/地址?参数 label框等于文字大小快捷键:command ...
随机推荐
- 团队作业week9
1. Bug bash ▪ How many bugs is found in your bug bash? 2. Write a blog to talk about your scenario t ...
- C#简述(二)
详情请参考:http://www.runoob.com/csharp/csharp-operators.html 1.C# 运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 ...
- 转Git学习碰到的问题
[原]Git学习碰到的问题 1.通过 windows 下的 gitbash 连接 github 时 $ ssh-keygen -t rsa -C "abcd@efgh.com" / ...
- CentOS 简单学习 firewalld的使用
1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...
- Java之扫描目录,修改文件内容
扫描目录下文件,修改文件中指定内容 package org.utils.tools.fileoper; import java.io.*; import java.util.ArrayList; im ...
- 在配置文件里面设置bean 那么在类里面就要提供set方法用以注入
在配置文件里面设置bean 那么在类里面就要提供set方法用以注入
- Linux Deploy Ubuntu安装MySQL
一.在Android手机安装Linux 二.Ubuntu安装Mysql 建议在root用户上操作 sudo su 输入密码 (一)安装mysql 1. sudo apt-get install mys ...
- MT【178】平移不变性
(2008年北大自招)已知$a_1,a_2,a_3;b_1,b_2,b_3$满足$a_1+a_2+a_3=b_1+b_2+b_3$$a_1a_2+a_2a_3+a_3a_1=b_1b_2+b_2b_3 ...
- 【BZOJ2257】[JSOI2009]瓶子和燃料(数论)
[BZOJ2257][JSOI2009]瓶子和燃料(数论) 题面 BZOJ 洛谷 题解 很明显就是从\(n\)个数里面选\(K\)个数让他们的\(gcd\)最大. 暴力找所有数的因数,拿个什么东西存一 ...
- 51nod1229 序列求和 V2 【数学】
题目链接 B51nod1229 题解 我们要求 \[\sum\limits_{i = 1}^{n}i^{k}r^{i}\] 如果\(r = 1\),就是自然数幂求和,上伯努利数即可\(O(k^2)\) ...