前几天项目中用到了一下CoreMotion框架,觉得iOS中的传感器还是挺好玩的,又花了点时间去了解了一下iOS中其他一些常用的传感器应用,今天简单做下总结。

iOS中的传感器大致有以下几种:

  1. 运动传感器\加速度传感器\加速计(Motion/Accelerometer Sensor)
  2. 环境光传感器(Ambient Light Sensor)
  3. 距离传感器(Proximity Sensor)
  4. 磁力计传感器(Magnetometer Sensor)
  5. 内部温度传感器(Internal Temperature Sensor)
  6. 湿度传感器(Moisture Sensor)
  7. 陀螺仪(Gyroscope)
    … …

网上找到这个图片,可以做下参考:

接下来针对常用的一些传感器,做下解释:

一 , 距离传感器的使用

    //打开传感器[UIDevice currentDevice].proximityMonitoringEnabled =YES;//监听有物品靠近还是离开[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(Change:) name:UIDeviceProximityStateDidChangeNotification object:nil];-(void)Change:(NSNotificationCenter*)center{if ([UIDevice currentDevice].proximityState) {NSLog(@"物品靠近");}else{NSLog(@"物品离开");}
}

二,加速计,陀螺仪,磁力仪(CoreMotion)
1 加速计 : 可以理解为物体所受外力沿着三个轴的分量 (在物体静止或者匀速直线运动的情况下,外界的力指的地球牵引力,利用x y z三个方向的分量可以知道手机在三维空间内的一个状态,从而实现一些功能。 例如, 屏幕中有个箭头一直指向下方(重力投影在屏幕上的方向)。

获取x y z数据方式有两种:主动获取(pull),基于代码块获取(push)。

主动获取: 需要的时候调用系统方法去获取

// 创建CMMotionManager对象
self.motionManager = [[CMMotionManager alloc] init];  // ①
// 如果CMMotionManager的支持获取加速度数据
if (self.motionManager.accelerometerAvailable)
{[self.motionManager startAccelerometerUpdates];self.motionManager.accelerometerUpdateInterval= 0.1; //设定每0.1秒更新一次数据
}
else
{NSLog(@"该设备不支持获取加速度数据!");
}//当需要x y z数据的时候,调用方法获取CMAcceleration acceleration=_motionManager.accelerometerData.acceleration;NSLog(@"%f---%f---%f",acceleration.x,acceleration.y,acceleration.z);

代码块获取: 设定更新时间,每次更新后主动返给我们

// 创建CMMotionManager对象
self.motionManager = [[CMMotionManager alloc] init];  // ①
// 如果CMMotionManager的支持获取加速度数据
if (self.motionManager.accelerometerAvailable)
{[self.motionManager startAccelerometerUpdates];self.motionManager.accelerometerUpdateInterval= 0.1; //设定每0.1秒更新一次数据
}
else
{NSLog(@"该设备不支持获取加速度数据!");
}//此方法每0.1秒就会返回一次 x y z数据[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {//重力再各个轴上的分量NSLog(@" 加速度%@", [NSString stringWithFormat:@"加速计:X:%.3f,Y:%.3f,Z:%.3f",accelerometerData.acceleration.x,accelerometerData.acceleration.y,accelerometerData.acceleration.z]  );}

2 陀螺仪

陀螺仪与加速计类似,存在pull 与Push获取方法, 直接贴代码

// 如果CMMotionManager的支持获取陀螺仪数据
if (self.motionManager.gyroAvailable)
{[self.motionManager startGyroUpdates];
}
else
{NSLog(@"该设备不支持获取陀螺仪数据!");
}//主动获取:CMGyroData* gyroData = self.motionManager.gyroData;self.gyroLabel.text = [NSString stringWithFormat:@"绕各轴的转速为\n--------\nX轴: %+.2f\nY轴: %+.2f\nZ轴: %+.2f",gyroData.rotationRate.x,gyroData.rotationRate.y,gyroData.rotationRate.z];//自动获取:[self.motionManager startGyroUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMGyroData *gyroData, NSError *error) {NSLog(@"gyro ===   %@", [NSString stringWithFormat:@"旋转角度:X:%.3f,Y:%.3f,Z:%.3f",gyroData.rotationRate.x,gyroData.rotationRate.y,gyroData.rotationRate.z]  );}

3 磁力仪

// 如果CMMotionManager的磁场数据可用
if (self.motionManager.magnetometerAvailable)
{// 主动请求获取磁场数据CMMagnetometerData* magnetometerData = self.motionManager.magnetometerData;self.magnetometerLabel.text =  [NSString stringWithFormat:@"磁场数据为\n--------\nX轴: %+.2f\nY轴: %+.2f\nZ轴: %+.2f",magnetometerData.magneticField .x,magnetometerData.magneticField .y,magnetometerData.magneticField .z];自动更新self.motionManager startMagnetometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMMagnetometerData * _Nullable magnetometerData, NSError * _Nullable error) {@"磁场数据为\n--------\nX轴: %+.2f\nY轴: %+.2f\nZ轴: %+.2f",magnetometerData.magneticField .x,magnetometerData.magneticField .y,magnetometerData.magneticField .z];}  }
}

手机摇一摇(比较简单, 直接贴代码)

//开始摇一摇
-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{NSLog(@"用户摇一摇");
}
-(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event{//摇一摇被打断(比如摇的过程中来电话)}-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
//摇一摇结束的时候操作}

三, 计步器

要获取计步信息, 可以直接调用系统的健康数据,基于HealthKit框架的。 可以参考
http://www.jianshu.com/p/42e913588380

那么, 不用HealthKit如何实现计步那?
参考 http://www.jianshu.com/p/8f896172fb3d
简单实现方法如下

#import <CoreMotion/CoreMotion.h>
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *stepLabel;
@property(nonatomic,strong)CMPedometer *step;
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];if (![CMPedometer isStepCountingAvailable ]) {NSLog(@"不可用");return;}//开始计步[self.step startPedometerUpdatesFromDate:[NSDate date] withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {NSLog(@"%@",pedometerData.numberOfSteps);self.stepLabel.text =[NSString stringWithFormat:@"%@",pedometerData.numberOfSteps];}];}

iOS中的传感器---摇一摇, 计步器,距离感应,陀螺仪相关推荐

  1. 【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言~~~ 一.传感器的种类 传感器Sensor是一系列感应器的总称,是Android设备用来感知周围环境和运动信息的工具. 因为具体的感应信息依赖于相关硬件,所以虽然A ...

  2. IOS系统中H5页面实现摇一摇功能

    公司准备开年会了,年会活动用了一套别人的系统,根据测试,有些游戏的摇一摇功能在IOS上无法使用,为了修复该功能,踩了一些坑,特此记录如下: 1. 因为IOS系统的安全要求,项目必须是在https的域名 ...

  3. 玩转Android之加速度传感器的使用,模仿微信摇一摇

    Android系统带的传感器有很多种,最常见的莫过于微信的摇一摇了,那么今天我们就来看看Anroid中传感器的使用,做一个类似于微信摇一摇的效果. OK ,废话不多说,我们就先来看看效果图吧: 当我摇 ...

  4. bugku 管理员系统 后台代码_不会吧,这也行?iOS后台锁屏监听摇一摇

    [toc] 背景介绍 一般情况下,出于省电.权限.合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但是iOS就无法实现!今天要介绍的需求也有这种感觉,就是"当 APP 处于后台或锁 ...

  5. android传感器实现摇一摇功能

    现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的"摇一摇"功能.前两天要实现这个功能,稍微看了一下关于传感器Sensor的内容. 传感器有几种类型: 方向传感器: Sen ...

  6. 微信摇一摇插件ios_微信密友插件ios下载-微信密友ios插件下载6.6.6最新版-西西软件下载...

    微信密友ios插件是一款功能强大的苹果版微信密友隐藏软件,该插件支持微信密友隐藏.后台消息推送.群红包自动抢.运动步数修改等功能,功能强大,界面清爽,欢迎下载体验! 微信密友ios插件介绍: 1.Cy ...

  7. Android传感器——传感器监听器及摇一摇案例

    接上<Android传感器--获取本机传感器> https://blog.csdn.net/nishigesb123/article/details/90143498 部分参考:https ...

  8. android传感器摇一摇功能

    现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的"摇一摇"功能.前两天要实现这个功能,稍微看了一下关于传感器Sensor的内容. 传感器有几种类型:        方向传 ...

  9. android开发利用传感器实现微信的摇一摇功能

    现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的"摇一摇"功能.前两天要实现这个功能,稍微看了一下关于传感器Sensor的内容. 传感器有几种类型:        方向传 ...

最新文章

  1. Java8 lambda表达式10个示例
  2. 学习笔记95—不要错过的科研神器
  3. 信息系统项目管理师选择案例论文三方面考试心得分享
  4. QT绘制百分比条形图。
  5. mysql 备份成文件的脚本_Mysql自动全量备份脚本
  6. install cuda5 on ubuntu12.04
  7. 父元素与子元素的width关系
  8. python 生成器对象_Python 生成器, 迭代器, 可迭代对象的区别
  9. Javascript动态函数
  10. 程序员须掌握的大数据分析核心技术
  11. 动态规划——最大整除子集C++
  12. 父子类中静态方法和属性实现
  13. 如何压缩jpg图片的大小
  14. 【iOS 15】iPhone如何录屏?iPhone屏幕录制技巧分享
  15. VHDL学习--分频器
  16. 重装系统后安装并激活Office
  17. 【iOS】XCode14 iOS16适配 pod签名 12.1闪退
  18. 工作绩效数据、工作绩效信息、工作绩效报告
  19. shell脚本中的空格
  20. C语言写一个猜数字游戏?我只想玩王者荣耀

热门文章

  1. 计算机论文致谢词范文500字,论文致谢词范文500字(精选6篇)
  2. 微信第三方平台授权流程说明
  3. 快速了解Mesh组网及应用
  4. 消防工程师 第二篇 建筑防火 5.1 防火分区
  5. vb.net 实现图片圆形渐变模糊
  6. 手机原来也能把照片制作成视频?1分钟包你学会,发朋友圈超有范
  7. 支付宝支付报 invalid-app-id : 无效的AppID参数
  8. ElasticSearch【有与无】【搜索引擎】【ES22】同义词【选读】
  9. docker下运行分布式代码报nccl错误:connect returned Connection timed out,成功解决
  10. PyTorch实现断点继续训练