iOS加速计、陀螺仪(CoreMotion.framework)

摘要:
在iOS5之前,我们使用UIAccelerator来获得加速度。用法很简单。然而,在iOS5之后,它过期了,所以我们使用了CoreMotion.framework。除非您要求,否则CMMotionManager不会给您。首先,介绍CoreMotion。frameworkframework#import<CoreMotion/CoreMotion。h˃ 创建管理类@propertyCMMotionManager*motionManager的对象;1.使用push方法获取加速度计数据:-加速度计push{//1。初始化运动管理对象自身。motionManager=[[CMMotionManageralloc]init]//2.如果(!

https://www.jianshu.com/p/c4fff00b50ff?open_source=weibo_search

CoreMotion.framework框架介绍

CoreMotion.framework是iOS中的一个核心运动框架,它能够满足我们手机许多应用的一些需求,比如:

  • 指南针
  • 加速计:微信摇一摇
  • 游戏中根据重力感应的操作
  • 计步器:知道我们每天走了多少步

一、加速计

检测设备在X、Y、Z轴上的加速度 (哪个方向有力的作用,哪个方向运动了)
根据加速度数值,就可以判断出在各个方向上的作用力度


 
iOS加速计、陀螺仪(CoreMotion.framework)第1张
 

注:重力不可忽略!!

在iOS5之前我们用UIAccelerometer来获取加速度,用法非常简单,不过iOS5之后就过期了,就用CoreMotion.framework了。
注:必须真机测试,不适用于模拟器


使用方法

加速计的数据获取方式有两种:push和pull

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

首先引入CoreMotion.framework框架框架

#import <CoreMotion/CoreMotion.h>

创建一个管理类的对象

@property (nonatomic, strong) CMMotionManager *motionManager;
1、使用push方式获取加速计数据:
- (void)accelerometerPush
{
    // 1.初始化运动管理对象
    self.motionManager = [[CMMotionManager alloc] init];
    // 2.判断加速计是否可用
    if (![self.motionManager isAccelerometerAvailable]) {
        NSLog(@"加速计不可用");
        return;
    }
    // 3.设置加速计更新频率,以秒为单位
    self.motionManager.accelerometerUpdateInterval = 0.1;
    // 4.开始实时获取
    [self.motionManager startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
        //获取加速度
        CMAcceleration acceleration = accelerometerData.acceleration;
        NSLog(@"加速度 == x:%f, y:%f, z:%f", acceleration.x, acceleration.y, acceleration.z);
    }];
}
2、使用pull方式获取加速计数据:
- (void)accelerometerPull
{
    // 1.初始化运动管理对象
    self.motionManager = [[CMMotionManager alloc] init];
    // 2.判断加速计是否可用
    if (![self.motionManager isAccelerometerAvailable]) {
        NSLog(@"加速计不可用");
        return;
    }
    // 3.开始更新
    [self.motionManager startAccelerometerUpdates];
}

//在需要的时候获取值
- (void)getAccelerometerData
{
    CMAcceleration acceleration = self.motionManager.accelerometerData.acceleration;
    NSLog(@"加速度 == x:%f, y:%f, z:%f", acceleration.x, acceleration.y, acceleration.z);
}

二、陀螺仪

陀螺仪的主要作用,是基于角动量守恒的原理,沿着某个特定的坐标轴测量旋转速率。在使用中,陀螺仪的转子在高速旋转时,始终指向一个固定的方向,当运动物体的运动方向偏离预定方向时,陀螺仪就可以感受出来。


 
iOS加速计、陀螺仪(CoreMotion.framework)第2张
 

注:必须真机测试,不适用于模拟器

使用方法

陀螺仪的数据获取方式同样也有两种:push和pull,跟加速计的方式一样!

首先引入CoreMotion.framework框架框架

#import <CoreMotion/CoreMotion.h>

创建一个管理类的对象

@property (nonatomic, strong) CMMotionManager *motionManager;
1、使用push方式获取陀螺仪数据:
- (void)gyroPush
{
    // 1.初始化运动管理对象
    self.motionManager = [[CMMotionManager alloc] init];
    // 2.判断陀螺仪是否可用
    if (![self.motionManager isGyroAvailable]) {
        NSLog(@"陀螺仪不可用");
        return;
    }
    // 3.设置陀螺仪更新频率,以秒为单位
    self.motionManager.gyroUpdateInterval = 0.1;
    // 4.开始实时获取
    [self.motionManager startGyroUpdatesToQueue:[[NSOperationQueue alloc] init] withHandler:^(CMGyroData * _Nullable gyroData, NSError * _Nullable error) {
        //获取陀螺仪数据
        CMRotationRate rotationRate = gyroData.rotationRate;
        NSLog(@"加速度 == x:%f, y:%f, z:%f", rotationRate.x, rotationRate.y, rotationRate.z);
    }];
}
2、使用pull方式获取陀螺仪数据:
- (void)gyroPull
{
    // 1.初始化运动管理对象
    self.motionManager = [[CMMotionManager alloc] init];
    // 2.判断陀螺仪是否可用
    if (![self.motionManager isGyroAvailable]) {
        NSLog(@"陀螺仪不可用");
        return;
    }
    // 3.开始更新
    [self.motionManager startGyroUpdates];
}

//在需要的时候获取值
- (void)getGyroData
{
    CMRotationRate rotationRate = self.motionManager.gyroData.rotationRate;
    NSLog(@"加速度 == x:%f, y:%f, z:%f", rotationRate.x, rotationRate.y, rotationRate.z);
}
三、demo

这里有我一个封装好可以直接使用摇一摇的demo,欢迎参考!!!

 
 
5人点赞
 
 


作者:my_杨哥
链接:https://www.jianshu.com/p/c4fff00b50ff
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

免责声明:文章转载自《iOS加速计、陀螺仪(CoreMotion.framework)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微信小程序,时间戳和日期格式互相转化面试官说“一开始工资不会给你太高,你可以接受吗?” 怎么怼回去??下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

robotframework的学习笔记(十三)------Robot Framework常用库简介

标准库Robot Framework可以直接导入使用的库,包括: Builtin:包含经常需要的关键字。自动导入无需import,因此总是可用的 Dialogs:提供了暂停测试执行和从用户的输入方式。 Collections:提供一组关键词处理Python列表和字典。 OperatingSystem:允许执行各种操作系统相关的任务。允许执行各种操作系统相...

NET Framework 4.0无法安装!

win7旗舰版无法安装CAD2012,安装NET Framework 4.0的时候就出现错误,安装NET Framework 4.0单独版也无法安装出现错误。 解决方法: 1.点击电脑桌面右下角的“开始”按钮,点击“运行”按钮,在弹出的节目输入框中输入“regedit”。 2.在弹出来的“注册表编辑器”界面上,选择HKEY_LOCAL_MACHINE...

Spring Framework------&amp;gt;version4.3.5.RELAESE-----&amp;gt;应用实例-------&amp;gt;测试spring framework的IOC功能

step1,确保你的project中已经包含了spring的beans/context/core/expression、三方logging模块, <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc...

IOS安全攻防(一)

Hack必备的命令与工具 你的应用正在被其他对手反向工程、跟踪和操作!你的应用是否依旧裸奔豪不防御? 郑重声明一下,懂得如何攻击才会懂得如何防御,一切都是为了之后的防御作准备。废话少说,进入正题。 今天总结一下为hack而做的准备工作。 常用的命令和工具 ps ——显示进程状态,CPU使用率,内存使用情况等 sysctl ——检查设定Kernel配置 n...

Android 操作系统的内存回收机制

Android 是一款基于 Linux 内核,面向移动终端的操作系统。为适应其作为移动平台操作系统的特殊需要,谷歌对其做了特别的设计与优化,使应用程序关闭但不退出,并由操作系统进行进程 的回收管理。本文在 Application Framework 与 Linux 内核两个层次上,以进程为粒度,对 Android 操作系统的进程资源回收机制进行了剖析。读者...

Android源码分析(二)-----如何编译修改后的framework资源文件

一 : 编译framework资源文件 如果修改android framework资源文件,需要先编译资源文件,然后再编译framework才可以正常引用,进入项目目录 cd work/source/frameworks/base/core/res/ 执行mm 编译 framework-res.apk(原生或高通)编译完后com.android.inte...