一、CoreMotion框架介绍

我们知道有一些iOS的应用,会有一些特殊的要求,比如:
1. 电子罗盘指南针之类的应用:让我们知道方向。
2. 运动类型软件:让我们知道我们跑步多少公里。
3. 社交软件中的摇一摇功能。
4. 游戏中扮演角色类中根据设备的晃动等进行操作。

其实,他们多半是使用了iOS中的一个核心运动框架CoreMotion.framework

使用iOS提供给我们的 CoreMotion 框架,主要是为了访问 加速度计 和 陀螺仪 的相关数据。 它不仅仅提供给你获得实时的加速度值和旋转速度值,更重要的是,苹果在其中集成了很多算法,可以直接给你输出把重力加速度分量剥离的加速度,省去你的高通滤波操作,以及提供给你一个专门的设备的三维位置信息。

传感器介绍:

加速度计:
加速度计的原理很简单,现在手机里面基本配备的都是3维线传感器,也就是说,用来测量x,y,z三个轴上的加速力。加速力就是当物体在加速过程中作用在物体上的力,就好比地球引力,也就是重力。
<img alt="\" src="http://www.2cto.com/uploadfile/Collfiles/20160418/20160418153000105.png" title="" kf="" ware="" vc="" "="" target="_blank" class="keylink" style="border-width: 0px; padding: 0px; margin: 0px; list-style: none; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; width: 340px; height: 395px;">

vc/yo6y1sdTLtq/O78zltcTUy7avt73P8sarwOvUpLaot73P8sqxo6zN08Ld0se+zb/J0tS40Mrcs/bAtKGjPGJyIC8+DQo8aW1nIGFsdD0="" src="/uploadfile/Collfiles/20160418/20160418153000107.png" title="\" />

二、CoreMotion使用

CoreMotion主要负责三种数据:

加速度值 CMAccelerometerData  陀螺仪值 CMGyroData  设备motion值 CMDeviceMotion

实际上,这个设备motion值就是通过加速度和旋转速度进行变换算出来的

CMDeviceMotion属性介绍:

attitude :通俗来讲,就是告诉你手机在当前空间的位置和姿势  gravity :重力信息,其本质是重力加速度矢量在当前设备的参考坐标系中的表达  userAcceleration :加速度信息  rotationRate :即时的旋转速率,是陀螺仪的输出

使用CoreMotion的步骤:

初始化 CMMotionManager 管理对象 调用管理对象的对象方法获取数据,有2种方式 处理数据 当你不需要使用的时候,停止获取数据

-(void)stopAccelerometerUpdates;//停止获取加速度计数据
-(void)stopGyroUpdates;//停止获取陀螺仪数据
-(void)stopDeviceMotionUpdates;//停止获取设备motion数据
在CoreMotion中有2种获取数据方式:

Push 方式:
提供一个线程管理器 NSOperationQueue 和一个回调 BlockCoreMotion 自动在每一个采样数据到来的时候回调这个 Block ,进行处理。在这种情况下, Block 中的操作会在你自己的 主线程 内执行。  Pull 方式:
你必须主动去向 CMMotionManager 要数据,这个数据就是最近一次的采样数据。你不去要, CMMotionManager 就不会给你。

1. 加速度计使用Pull方式获取:
- (void)useAccelerometerPull{//初始化全局管理对象CMMotionManager *manager = [[CMMotionManager alloc] init];self.motionManager = manager;//判断加速度计可不可用,判断加速度计是否开启if ([manager isAccelerometerAvailable] && [manager isAccelerometerActive]){//告诉manager,更新频率是100Hzmanager.accelerometerUpdateInterval = 0.01;//开始更新,后台线程开始运行。这是Pull方式。[manager startAccelerometerUpdates];}//获取并处理加速度计数据CMAccelerometerData *newestAccel = self.motionManager.accelerometerData;NSLog(@"X = %.04f",newestAccel.acceleration.x);NSLog(@"Y = %.04f",newestAccel.acceleration.y);NSLog(@"Z = %.04f",newestAccel.acceleration.z);
}
2. 加速度计使用Push方式获取:
- (void)useAccelerometerPush{//初始化全局管理对象CMMotionManager *manager = [[CMMotionManager alloc] init];self.motionManager = manager;//判断加速度计可不可用,判断加速度计是否开启if ([manager isAccelerometerAvailable] && [manager isAccelerometerActive]){//告诉manager,更新频率是100Hzmanager.accelerometerUpdateInterval = 0.01;NSOperationQueue *queue = [[NSOperationQueue alloc] init];//Push方式获取和处理数据[manager startAccelerometerUpdatesToQueue:queuewithHandler:^(CMAccelerometerData *accelerometerData, NSError *error){NSLog(@"X = %.04f",accelerometerData.acceleration.x);NSLog(@"Y = %.04f",accelerometerData.acceleration.y);NSLog(@"Z = %.04f",accelerometerData.acceleration.z);}];}
}
3. 陀螺仪使用Push方式获取,Pull方式就不列出来了,和加速度计使用相似:
- (void)useGyroPush{//初始化全局管理对象CMMotionManager *manager = [[CMMotionManager alloc] init];self.motionManager = manager;//判断陀螺仪可不可以,判断陀螺仪是不是开启if ([manager isGyroAvailable] && [manager isGyroActive]){NSOperationQueue *queue = [[NSOperationQueue alloc] init];//告诉manager,更新频率是100Hzmanager.gyroUpdateInterval = 0.01;//Push方式获取和处理数据[manager startGyroUpdatesToQueue:queuewithHandler:^(CMGyroData *gyroData, NSError *error){NSLog(@"Gyro Rotation x = %.04f", gyroData.rotationRate.x);NSLog(@"Gyro Rotation y = %.04f", gyroData.rotationRate.y);NSLog(@"Gyro Rotation z = %.04f", gyroData.rotationRate.z);}];}
}

CMMotionManager常用的属性

CMAttitude的三个属性Yaw,Pitch和Roll分别代表左右摆动、俯仰以及滚动。它的大小跟速度没有关系只跟位置有关。

motionManager.attitude.yaw(左右摆动)

motionManager.attitude.pitch(俯仰)

motionManager.attitude.roll(滚动)

Gravity的三个属性x,y,z代表重力1g在三个轴上的设备的重力分布情况,它的大小跟速度没有关系只跟位置有关。

motionManager.gravity.x

motionManager.gravity.y

motionManager.gravity.z

UserAcceleration三个属性x,y,z代表三个轴上的设备运动的加速度分布情况,它的大小跟位置没有关系只跟单位时间内的速度变化有关。

motionManager.userAcceleration.x

motionManager.userAcceleration.y

motionManager.userAcceleration.z

CMRotationRate的X,Y,Z分别代表三个轴上的旋转速率,单位为弧度/秒。它的大小跟位置没有关系只跟速度大小有关。

motionManager.rotationRate.x

motionManager.rotationRate.y

motionManager.rotationRate.z

iOS 加速计和陀螺仪 简介相关推荐

  1. ios加速计(可以用来检测摇动,自定义反应灵敏度)

    ios加速计 标签: ios 编程 xcode开发 加速计 杂谈   分类: ios开发 内置加速计是iPhone和iPod Touch中最酷的特性之一,iPhone可以通过这个小设备知道用户握持手机 ...

  2. 小程序—这款工具把加速计、陀螺仪、设备方向的调试痛点解决了

    之前在一篇博文中捎带介绍过这款工具,反响很好,还收到了两位用户的打赏,但受那篇博文的影响,并没有被广大小程序开发者所熟知,故写一篇专门的,希望能有更多用户不再被加速计.陀螺仪.设备方向的调试难题再刺痛 ...

  3. iOS平台使用陀螺仪传感器

    iOS平台使用陀螺仪传感器 在移动端开发过程中,有时候会用到陀螺仪传感器获取当前手机的姿态,下面给出iOS端如何获取陀螺仪姿态数据的代码: 1 //根据陀螺仪的四元数转换为矩阵 2 + (GLKMat ...

  4. 关于Facebook iOS UI 工具ComponentKit简介

    在 iOS 上面开发界面,需要创建视图.配置界面.视图分层等等很多步骤,也就不可避免的需要书写 N 多的代码.这还仅仅是界面设计,除此之外,完成 controllers 的回调.控制内部事务在界面上的 ...

  5. iOS GitHub Top 100 简介

    GitHub Top 100 简介 主要对当前 GitHub 排名前 100 的项目做一个简单的简介, 方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. Android 版 ...

  6. ios逆向工具MonkeyDev简介

    MonkeyDev简介 虽然是美国的苹果开发的操作系统,但是要论越狱iPhone和逆向分析来说,那国内远胜于米国了,可能是国内很多相关的灰色产业链吧.在之前,我们想动态调试一个没有源码的应用程序,通常 ...

  7. iOS之CAGradientLayer属性简介和使用

    1.CAGradientLayer简介 CAGradientLayer用于制作背景图层的颜色渐变,也就是颜色梯度!相关属性简介: #import <QuartzCore/CALayer.h> ...

  8. iOS持久化存储-CoreData简介

    本文目录 一.简介 二.模型文件 三.了解NSManagedObject对象 四.CoreData中的核心对象 五.代码实现 六.打开CoreData的SQL语句输出开关 七.创建NSManagedO ...

  9. iOS开发---开发工具简介

    成为一iOS程序开发者,首先需要一台运行Mac OS的电脑. Mac系统是 苹果机专用系统,是基于Unix 内核的图形化操作系统:一般情况下在普通 pc上无法安装的操作系统.由 苹果公司自行开发. 苹 ...

最新文章

  1. Oracle EXPDP/IMPDP示例
  2. 腾讯员工中66%是研发,用C++最多,去年新写12.9亿行代码
  3. 第32讲:实时处理利器 mitmproxy 的使用
  4. sklearn自学指南(part19)--LDA和QDA
  5. IOS-UIDynamic
  6. 数据结构实验六 综合数据处理
  7. 电子书下载:Microsoft Windows Identity Foundation Cookbook
  8. Http Handler 介绍
  9. 学习嵌入式和单片机有没有必要,价值体现在哪
  10. MPQ4420HGJ DCDC电源设计
  11. LBS(基于位置服务)常见定位技术综合分析
  12. 常用颜色透明度色值表
  13. bugku之凯撒部长的奖励
  14. 米兔机器人魔方_米兔指尖积木?就要盘它
  15. Linux中time()函数用法
  16. 如何解决WIN10处于通知模式的问题?
  17. Oracle中的chr()函数 和 ascii()函数
  18. 三种js轮播实现方式详解(看一遍就会)
  19. python_for_hrm:读取花名册员工身份证信息,通过企业微信机器人提醒人事做生日准备
  20. 新一代 Linux 文件系统 btrfs 简介-btrfs 的特性和使用

热门文章

  1. 号码标记查询 php,你的手机号码有没有被标记?这个网站可以查询
  2. 基于GoKit(4)的物联网应用开发沙龙体验
  3. 综述二 | 最全的目标检测大综述(附下载链接)
  4. 餐饮行业APP开发解决方案
  5. PS修改图片的颜色,将绿色变成红色
  6. 初中基础学java_初中生也能学JAVA吗?
  7. PHP怎么制作扑克牌游戏,我是这样开发简易扑克牌游戏
  8. <div></div>使用案例
  9. [模式识别].(希腊)西奥多里蒂斯第四版笔记2之__基于贝叶斯决策理论的分类器
  10. dz搬家 config_global.php 不可写入,傻瓜式Discuz论坛搬家教程