手机里面内置了很多的传感器,例如:光传感器,湿度传感器,温度传感器,距离传感器等等

//开发传感器相关的东西必须使用真机

//在螺旋仪和加速计所有两种方式push和pull的方式,push的方式是时时检测,pull的方式是需要时获取检测值

/*

加速计push的使用步骤:

1.创建运动管理者

_mgr = [[CMMotionManager alloc] init];

2.判断手机加速计是否可用

if (!self.mgr.isAccelerometerAvailable) {

NSLog(@"加速计不可使用,请更换手机");

return;

}

3.设置取样间隔

self.mgr.accelerometerUpdateInterval = 1.0/30.0;

4.开启检测

[self.mgr startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] 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方式使用步骤

1.创建运动管理者

_mgr = [[CMMotionManager alloc] init];

2.判断手机陀螺仪是否可用

if (!self.mgr.isGyroAvailable) {

NSLog(@"陀螺仪不可用");

return;

}

3.开启检测

[self.mgr startGyroUpdates];

4.获取需要的值

CMRotationRate   rotationRate =   self.mgr.gyroData.rotationRate;

NSLog(@"x:%f y:%f  z:%f",rotationRate.x,rotationRate.y,rotationRate.z);

//加速计和陀螺仪的用法基本一致--------------

//运动管理者控制器要去拥有它,否则有可能为局部变量,不能使用.

*/

//#import <CoreMotion/CoreMotion.h>导入与运动相关框架

#import "ViewController.h"

#import <CoreMotion/CoreMotion.h>

@interface ViewController ()

@property (nonatomic,strong) CMMotionManager * mgr;

@end

@implementation ViewController

//懒加载创建运动管理者

- (CMMotionManager *)mgr

{

if (_mgr == nil) {

_mgr = [[CMMotionManager alloc] init];

}

return _mgr;

}

- (void)viewDidLoad {

[super viewDidLoad];

}

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event

{

NSLog(@"%zd,%@",motion,event);

NSLog(@"开始摇晃");

}

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event

{

NSLog(@"%zd,%@",motion,event);

NSLog(@"摇晃取消");

}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event

{

NSLog(@"%zd,%@",motion,event);

NSLog(@"摇晃结束");

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

//加速计相关

//    CMAcceleration   acceleration =    self.mgr.accelerometerData.acceleration;

//    NSLog(@"x:%f  y:%f  z:%f",acceleration.x,acceleration.y,acceleration.z);

//加速计相关

//陀螺仪相关

CMRotationRate   rotationRate =   self.mgr.gyroData.rotationRate;

NSLog(@"x:%f y:%f  z:%f",rotationRate.x,rotationRate.y,rotationRate.z);

}

- (void)pullGyro

{

if (!self.mgr.isGyroAvailable) {

NSLog(@"陀螺仪不可用");

return;

}

[self.mgr startGyroUpdates];

}

- (void)pushGyro

{

//判断手机的陀螺仪是否可用

if (!self.mgr.gyroAvailable) {

NSLog(@"陀螺仪不可用,请更换手机");

return;

}

//设置采样间隔

self.mgr.gyroUpdateInterval = 1.0/20.0;

//开始检测陀螺仪的变化

[self.mgr startGyroUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMGyroData * _Nullable gyroData, NSError * _Nullable error) {

CMRotationRate  rotationRate =   self.mgr.gyroData.rotationRate;

NSLog(@"x:%f y:%f z:%f",rotationRate.x,rotationRate.y,rotationRate.z);

}];

}

- (void)pullAccelerometer

{

if (!self.mgr.isAccelerometerAvailable) {

NSLog(@"加速计不可使用,请更换手机");

return;

}

[self.mgr startAccelerometerUpdates];

}

- (void)pushAccelerometer

{

//CMMotionManager * mgr = [[CMMotionManager alloc] init];

//判断加速计是否可用

if (!self.mgr.isAccelerometerAvailable) {

NSLog(@"加速计不可用,请更换手机");

return;

}

//设置采样间隔

self.mgr.accelerometerUpdateInterval = 1.0/30.0;

[self.mgr startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {

CMAcceleration  acceleration =  accelerometerData.acceleration;

NSLog(@"x:%f  y:%f  z:%f",acceleration.x,acceleration.y,acceleration.z);

}];

}

- (void)proximityMonitoring

{

//开启距离传感器

[UIDevice currentDevice].proximityMonitoringEnabled = YES;

//监听距离的变化

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityStateDidChange:) name:UIDeviceProximityStateDidChangeNotification object:nil];

}

- (void)proximityStateDidChange:(NSNotification*)noti

{

if ([UIDevice currentDevice].proximityState == YES) {

NSLog(@"有物品靠近");

}else{

NSLog(@"物品离开");

}

}

- (void)dealloc

{

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

iOS开发传感器相关的更多相关文章

  1. iOS 开发,相关网址

    iOS 开发,相关网址 说明 网址 注册开发者 https://developer.apple.com/cn/programs/enroll/ 未付费688个人开发账号真机调试测试教程 http:// ...

  2. iOS开发其他相关

    1.iOS开发行情 1.1 iOS系统各个版本的占比查询 2.Xcode的使用 开发软件下载 Xcode Help(官方) 2.1 Xcode面板 Xcode面板 2.2 Xcode版本新功能 Xco ...

  3. iOS开发,UITableView相关问题

    第一条:UITableViewCell 内容的设置 //文本放到最后 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_dataArr.co ...

  4. iOS开发 传感器(加速计、摇一摇、计步器)

    一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...

  5. iOS 开发库相关(持续更新)

    01-给任意view添加毛玻璃效果 https://github.com/JagCesar/iOS-blur   02-浮动式的textfield输入框(可用于登录界面) https://github ...

  6. 【转】 iOS开发之打包上传到App Store——(一)各种证书的理解

    OK,有日子没写iOS开发的相关文章啦,主要是最近的精力都没在这上面,不过既然产品已经快要出来了,就有必要了解一下各种证书啥的(众所周知iOS的一堆证书可是很让人头大呀),最近确实被这个搞得头大,然后 ...

  7. Mac和iOS开发资源汇总

    小引 本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按command+D). 今天(2013年7月19日)收录了许多中文网站和博客.大家一定要去感受一下哦. 如果大 ...

  8. 【转】Mac和iOS开发资源汇总—更新于2013-07-19

    小引 本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按command+D). 今天(2013年7月19日)收录了许多中文网站和博客.大家一定要去感受一下哦. 如果大 ...

  9. (转载)Mac和iOS开发资源汇总—更新于2013-07-19

    (转载)http://beyondvincent.com/2013/07/18/resources-for-mac-and-ios-developers/ 小引 本文主要汇集一些苹果开发的资源,会经常 ...

随机推荐

  1. 【原】手写一个promise

    上一篇文章中,我们介绍了Promise的基本使用,在这篇文章中,我们试着自己来写一个Promise,主要是学习Promise的内部机制,学习它的编程思想. !!!备注:本文写的不好,仅供自己学习之用, ...

  2. windows Git安装

    git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目 一.Git下载 官网地址:https://git-scm.com/download/win,选择相应的版本即可 二.安 ...

  3. vim编辑器设置文件的fileformat

    问题:dos格式文件传输到centos系统时,会在每行的结尾多一个^M,即dos文件中的换行符"\r\n"会被转换为unix文件中的换行符"\n",而此文件若是 ...

  4. laravel 安装 Laravel 扩展包

    问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 comp ...

  5. QT学习笔记—1

    1.模态和非模态的区别:非模态可以同时操作两个窗口,模态的只能在顶层窗口关闭之后才能使用其他窗口 //同时显示出widget和dialog窗口,非模态     QDialog *dialog = ne ...

  6. LoRaWAN_stack移植笔记(一)--RF硬件相关

    和硬件相关的问题 TCXO 的使用 根据SX1276数据手册, 如果使用TCXO,则需要配置RegTcxo寄存器为0x19,代码如下 ``` c void SX1276SetTcxoConfig(vo ...

  7. insertable = false, updatable = false的使用

    转自:insertable = false, updatable = false的使用 当使用JPA配置实体时,如果有两个属性(一个是一般属性,一个是多对一的属性)映射到数据库的同一列,就会报错. 这 ...

  8. ES 6 : 变量的解构赋值

    1. 数组的解构赋值 [ 基本用法 ] 按照一定的模式从数组或者对象中取值,对变量进行赋值的过程称为解构. 以前,为变量赋值只能直接指定值: 而ES 6 允许写成下面这样: 上面的代码表示,可以从数组 ...

  9. VM10下Ubuntu无法安装vim的问题

    今天在VM10下重装了Ubuntu14.10,安装vim时发现如下问题 谷歌了一下,终于找到一种方法解决. 终端下: sudo vi /etc/apt/source.list 该命令将用vi打开一个文 ...

  10. Struts2中一个自定义拦截器的使用

    1.自定义的拦截器的类: package it.web.interceptor; import com.opensymphony.xwork2.ActionContext; import com.op ...