加速计 & 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 ...
随机推荐
- metasploit学习之情报搜集
3.1.被动信息搜集whois查询Netcraft nslookup>set type=mx>testfire.net Google Hacking 3.2 主动信息搜集 使用nmap进行 ...
- PAT 甲级 1079 Total Sales of Supply Chain
https://pintia.cn/problem-sets/994805342720868352/problems/994805388447170560 A supply chain is a ne ...
- Django-项目配置
目录 配置文件 数据库配置DATABASE - 指定MySQL数据库 数据库配置DATABASE - 指定SQL Server数据库 数据库配置DATABASE - 指定多个数据库 模版文件 静态文件 ...
- XP局域网访问无权限、不能互相访问问题的完整解决方案
XP局域网访问无权限问题的完整解决方案: 1:用管理员账户登录系统 2:在“开始”-- “运行”里输入 GPEDIT.MSC 目的是打开组策略选项 3:依次展开”WINDOWS设置”-”本地策略”-” ...
- 设置close
- 【刷题】BZOJ 2724 [Violet 6]蒲公英
Description Input 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 Output Sample Input ...
- 【刷题】BZOJ 4916 神犇和蒟蒻
Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...
- python里使用正则表达式的非贪婪模式
在正则表达式里,什么是正则表达式的贪婪与非贪婪匹配 如:String str="abcaxc"; Patter p="ab*c"; 贪婪匹配:正则表达式一般趋向 ...
- 手速太慢QAQ
显然D是个细节题,但是还剩1h时看眼榜还没人过EF,只好冷静写D,大概思路是任何时候如果min(n,m)<=2,max(n,m)<=4暴搜,否则直接贪心是很对的,即第一步让S.T长度平均化 ...
- 【bzoj4009】 HNOI2015—接水果
http://www.lydsy.com/JudgeOnline/problem.php?id=4009 (题目链接) 题意 给出一颗无根树.有一些路径记为$P_i$,这些路径有两个端点和一个权值$W ...