iOS中的传感器---摇一摇, 计步器,距离感应,陀螺仪
前几天项目中用到了一下CoreMotion框架,觉得iOS中的传感器还是挺好玩的,又花了点时间去了解了一下iOS中其他一些常用的传感器应用,今天简单做下总结。
iOS中的传感器大致有以下几种:
- 运动传感器\加速度传感器\加速计(Motion/Accelerometer Sensor)
- 环境光传感器(Ambient Light Sensor)
- 距离传感器(Proximity Sensor)
- 磁力计传感器(Magnetometer Sensor)
- 内部温度传感器(Internal Temperature Sensor)
- 湿度传感器(Moisture Sensor)
- 陀螺仪(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中的传感器---摇一摇, 计步器,距离感应,陀螺仪相关推荐
- 【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
需要源码请点赞关注收藏后评论区留言~~~ 一.传感器的种类 传感器Sensor是一系列感应器的总称,是Android设备用来感知周围环境和运动信息的工具. 因为具体的感应信息依赖于相关硬件,所以虽然A ...
- IOS系统中H5页面实现摇一摇功能
公司准备开年会了,年会活动用了一套别人的系统,根据测试,有些游戏的摇一摇功能在IOS上无法使用,为了修复该功能,踩了一些坑,特此记录如下: 1. 因为IOS系统的安全要求,项目必须是在https的域名 ...
- 玩转Android之加速度传感器的使用,模仿微信摇一摇
Android系统带的传感器有很多种,最常见的莫过于微信的摇一摇了,那么今天我们就来看看Anroid中传感器的使用,做一个类似于微信摇一摇的效果. OK ,废话不多说,我们就先来看看效果图吧: 当我摇 ...
- bugku 管理员系统 后台代码_不会吧,这也行?iOS后台锁屏监听摇一摇
[toc] 背景介绍 一般情况下,出于省电.权限.合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但是iOS就无法实现!今天要介绍的需求也有这种感觉,就是"当 APP 处于后台或锁 ...
- android传感器实现摇一摇功能
现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的"摇一摇"功能.前两天要实现这个功能,稍微看了一下关于传感器Sensor的内容. 传感器有几种类型: 方向传感器: Sen ...
- 微信摇一摇插件ios_微信密友插件ios下载-微信密友ios插件下载6.6.6最新版-西西软件下载...
微信密友ios插件是一款功能强大的苹果版微信密友隐藏软件,该插件支持微信密友隐藏.后台消息推送.群红包自动抢.运动步数修改等功能,功能强大,界面清爽,欢迎下载体验! 微信密友ios插件介绍: 1.Cy ...
- Android传感器——传感器监听器及摇一摇案例
接上<Android传感器--获取本机传感器> https://blog.csdn.net/nishigesb123/article/details/90143498 部分参考:https ...
- android传感器摇一摇功能
现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的"摇一摇"功能.前两天要实现这个功能,稍微看了一下关于传感器Sensor的内容. 传感器有几种类型: 方向传 ...
- android开发利用传感器实现微信的摇一摇功能
现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的"摇一摇"功能.前两天要实现这个功能,稍微看了一下关于传感器Sensor的内容. 传感器有几种类型: 方向传 ...
最新文章
- Java8 lambda表达式10个示例
- 学习笔记95—不要错过的科研神器
- 信息系统项目管理师选择案例论文三方面考试心得分享
- QT绘制百分比条形图。
- mysql 备份成文件的脚本_Mysql自动全量备份脚本
- install cuda5 on ubuntu12.04
- 父元素与子元素的width关系
- python 生成器对象_Python 生成器, 迭代器, 可迭代对象的区别
- Javascript动态函数
- 程序员须掌握的大数据分析核心技术
- 动态规划——最大整除子集C++
- 父子类中静态方法和属性实现
- 如何压缩jpg图片的大小
- 【iOS 15】iPhone如何录屏?iPhone屏幕录制技巧分享
- VHDL学习--分频器
- 重装系统后安装并激活Office
- 【iOS】XCode14 iOS16适配 pod签名 12.1闪退
- 工作绩效数据、工作绩效信息、工作绩效报告
- shell脚本中的空格
- C语言写一个猜数字游戏?我只想玩王者荣耀
热门文章
- 计算机论文致谢词范文500字,论文致谢词范文500字(精选6篇)
- 微信第三方平台授权流程说明
- 快速了解Mesh组网及应用
- 消防工程师 第二篇 建筑防火 5.1 防火分区
- vb.net 实现图片圆形渐变模糊
- 手机原来也能把照片制作成视频?1分钟包你学会,发朋友圈超有范
- 支付宝支付报 invalid-app-id : 无效的AppID参数
- ElasticSearch【有与无】【搜索引擎】【ES22】同义词【选读】
- docker下运行分布式代码报nccl错误:connect returned Connection timed out,成功解决
- PyTorch实现断点继续训练