IOS 传感器
Posted Andy__Wu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS 传感器相关的知识,希望对你有一定的参考价值。
一 传感器
- 什么是传感器
-
传感器的作用
- 用于感应\\检测设备周边的信息
- 不同类型的传感器, 检测的信息也不一样
-
iPhone内置的传感器有
- 运动传感器\\加速度传感器\\加速计(Motion/Accelerometer Sensor)
- 环境光传感器(Ambient Light Sensor)
- 距离传感器(Proximity Sensor)
- 磁力计传感器(Magnetometer Sensor)
- 内部温度传感器(Internal Temperature Sensor)
- 湿度传感器(Moisture Sensor)
- 陀螺仪(Gyroscope)
… …
二 距离传感器
[UIDevice currentDevice].proximityMonitoringEnabled = YES;
三 加速计信息获取##
- (void)viewDidLoad
[super viewDidLoad];
UIAccelerometer *acceleromter = [UIAccelerometer sharedAccelerometer];
acceleromter.delegate = self;
acceleromter.updateInterval = 1.0 / 5;
#pragma mark - 实现UIAccelerometer的代理方法
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
NSLog(@"x:%f y:%f z:%f", acceleration.x, acceleration.y, acceleration.z);
四 CoreMotion方法##
-
Core Motion获取数据的两种方式
- push:实时采集所有数据(采集频率高)
- pull:在有需要的时候,再主动去采集数据
-
加速计信息获取(pull/push)
CMMotionManager *mgr = [[CMMotionManager alloc] init];
if (!self.mgr.isAccelerometerAvailable)
NSLog(@"加速计不可用,请更换手机");
return;
self.mgr.accelerometerUpdateInterval = 1.0;
[self.mgr startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error)
if (error)
NSLog(@"%@", error);
return;
CMAcceleration acceleration = accelerometerData.acceleration;
NSLog(@"x:%f y:%f z:%f", acceleration.x, acceleration.y, acceleration.z);
];
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
[self.mgr startAccelerometerUpdates];
if (!self.mgr.isGyroAvailable)
NSLog(@"设备小于iPhone4,或者陀螺仪损坏");
return;
self.mgr.gyroUpdateInterval = 1.0 / 10;
[self.mgr startGyroUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMGyroData * _Nullable gyroData, NSError * _Nullable error)
if (error)
NSLog(@"%@", error);
return;
CMRotationRate rotationRate = gyroData.rotationRate;
NSLog(@"x:%f y:%f z:%f", rotationRate.x, rotationRate.y, rotationRate.z);
];
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
[self.mgr startGyroUpdates];
五 摇⼀摇功能##
- 监控摇一摇的方法
- 方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂)
- 方法2:ios自带的Shake监控API(非常简单)
- 判断摇一摇的步骤:实现3个摇一摇监听方法
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event /** 检测到摇动 */
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event /** 摇动取消(被中断) */
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event /** 摇动结束 */
六 计步器##
if (![CMStepCounter isStepCountingAvailable])
NSLog(@"计步器不可用");
return;
CMStepCounter *stepCounter = [[CMStepCounter alloc] init];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[stepCounter startStepCountingUpdatesToQueue:queue updateOn:5 withHandler:^(NSInteger numberOfSteps, NSDate * _Nonnull timestamp, NSError * _Nullable error)
if (error) return;
NSString *stepString = [NSString stringWithFormat:@"您一共走了%ld步", numberOfSteps];
[self.stepLabel performSelectorOnMainThread:@selector(setText:) withObject:stepString waitUntilDone:YES];
];
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
if (![CMPedometer isStepCountingAvailable])
return;
CMPedometer *pedometer = [[CMPedometer alloc] init];
NSDate *date = [NSDate date];
[self.pedometer startPedometerUpdatesFromDate:date withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error)
if (error)
NSLog(@"%@", error);
return;
NSLog(@"您一共走了%@步", pedometerData.numberOfSteps);
];
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd";
NSDate *fromDate = [fmt dateFromString:@"2015-9-26"];
NSDate *toDate = [fmt dateFromString:@"2015-9-28"];
[self.pedometer queryPedometerDataFromDate:fromDate toDate:toDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error)
NSLog(@"%@", pedometerData.numberOfSteps);
];
以上是关于IOS 传感器的主要内容,如果未能解决你的问题,请参考以下文章
IOS 传感器
iOS真机调试步骤
iOS真机调试详解
如何使用此传感器 API 中的磁力计?
来自智能手机的后处理传感器读数 - 从磁力计计算的重力
重力感应器都有哪些工作原理