iOS---开发实用传感器
2015-09-02 12:32
337 查看
传感器
1.什么是传感器
传感器是一种感应\检测装置, 目前已经广泛应用于智能手机上2.传感器的作用
用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样
iPhone中的下面现象都是由传感器完成的
在地图应用中, 能判断出手机头面向的方向
一关灯, iPhone会自动降低亮度让屏幕显得不是那么刺眼
打电话时, 人脸贴近iPhone屏幕时, 屏幕会自动锁屏, 达到省电的目的
3.传感器的类型
iPhone5中内置的传感器有运动传感器\加速度传感器\加速计(Motion/Accelerometer Sensor)
环境光传感器(Ambient Light Sensor)
距离传感器(Proximity Sensor)
磁力计传感器(Magnetometer Sensor)
内部温度传感器(Internal Temperature Sensor)
湿度传感器(Moisture Sensor)
陀螺仪(Gyroscope)
传感器类型
传感器类型 | 作用 |
---|---|
环境光传感器 | 感应周边环境光线的强弱(自动调节屏幕亮度) |
距离传感器 | 感应是否有其他物体靠近设备屏幕(打电话自动锁屏) |
磁力计传感器 | 感应周边的磁场 |
内部温度传感器 | 感应设备内部的温度(提醒用户降温,防止损伤设备) |
湿度传感器 | 感应设备是否进水(方便维修人员) |
陀螺仪 | 感应设备的持握方式(赛车类游戏) |
加速计 | 感应设备的运动(摇一摇、计步器) |
- (void)viewDidLoad { [super viewDidLoad]; // 1.开启距离传感器(注意: 默认情况距离传感器是关闭的) // [UIApplication sharedApplication].proximitySensingEnabled = YES; // 只要开启之后, 就开始实时监听 [UIDevice currentDevice].proximityMonitoringEnabled = YES; // 2.当监听到有物体靠近设备时系统会发出通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityStateDidChange:) name:UIDeviceProximityStateDidChangeNotification object:nil]; } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } // 当监听到有物体靠近设备时调用 - (void)proximityStateDidChange:(NSNotification *)note { // NSLog(@"%@", note); if( [UIDevice currentDevice].proximityState) { NSLog(@"有物体靠近"); }else { NSLog(@"物体离开"); } }
加速计
加速计的作用
用于检测设备的运动(比如摇晃)
加速计的经典应用场景
摇一摇
计步器
加速计程序的开发
在iOS4以前:使用UIAccelerometer,用法非常简单(到了iOS5就已经过期)
从iOS4开始:CoreMotion.framework
虽然UIAccelerometer已经过期,但由于其用法极其简单,很多程序里面都还有残留
加速计--UIAccelerometer的使用步骤
// 获得单例对象 UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer]; // 设置代理 accelerometer.delegate = self; // 设置采样间隔 accelerometer.updateInterval = 1.0/30.0; // 1秒钟采样30次 // 实现代理方法 - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration // acceleration中的x、y、z三个属性分别代表每个轴上的加速度
加速计--Core Motion
在iOS4之前,加速度计由UIAccelerometer类来负责采集数据
随着iPhone4的推出
加速度计全面升级,并引入了陀螺仪
与Motion(运动)相关的编程成为重头戏
苹果特地在iOS4中增加了专门处理Motion的框架-CoreMotion.framework
Core Motion不仅能够提供实时的加速度值和旋转速度值,更重要的是,苹果在其中集成了很多牛逼的算法
Core Motion获取数据的两种方式
push
实时采集所有数据(采集频率高)
```objc
// 1.创建运动管理者对象(强引用)
CMMotionManager *mgr = [[CMMotionManager alloc] init];
// 2.判断加速计是否可用(最好判断)
if (mgr.isAccelerometerAvailable) {
// 加速计可用
}
// 3.设置采样间隔
mgr.accelerometerUpdateInterval = 1.0/30.0; // 1秒钟采样30次
// 4.开始采样(采样到数据就会调用handler,handler会在queue中执行)
(void)startAccelerometerUpdatesToQueue:(NSOperationQueue *)queue withHandler:(CMAccelerometerHandler)handler;
```
pull
在有需要的时候,再主动去采集数据
```objc
// 1.创建运动管理者对象
CMMotionManager *mgr = [[CMMotionManager alloc] init];
// 2.判断加速计是否可用(最好判断)
if (mgr.isAccelerometerAvailable) { // 加速计可用 }
// 3.开始采样
(void)startAccelerometerUpdates;
// 4.在需要的时候采集加速度数据
CMAcceleration acc = mgr.accelerometerData.acceleration;
NSLog(@"%f, %f, %f", acc.x, acc.y, acc.z);
```
计步器
- (void)viewDidLoad { [super viewDidLoad]; // 1.判断计步器是否可用(iOS7开始有的API) if (![CMStepCounter isStepCountingAvailable]) { NSLog(@"计步器不可用"); return; } // 2.创建计步器对象 CMStepCounter *stepCounter = [[CMStepCounter alloc] init]; // 3.开始计步 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [stepCounter startStepCountingUpdatesToQueue:queue updateOn:5 withHandler:^(NSInteger numberOfSteps, NSDate *timestamp, NSError *error) { if (error) return; NSString *stepString = [NSString stringWithFormat:@"您一共走%ld步", numberOfSteps]; // [self.stepLabel performSelectorOnMainThread:@selector(setText:) withObject:stepString waitUntilDone:NO]; dispatch_async(dispatch_get_main_queue(), ^{ self.stepLabel.text = stepString; }); }]; }
相关文章推荐
- iOS开发路线简述
- iOS开发之检测设备锁屏
- 苹果开发 笔记(70)常用的字符串操作
- iOS进阶路线以及进阶书籍
- iOS 多线程与GCD
- iOS开发过程中的疑问
- IOS Block语法
- iOS学习之NSArray的排序方法
- iOS从零开始学习之初
- IOS - sectionHeader的编辑(纯代码做界面)
- iOS 9 适配系列教程
- iOS录音
- 【iOS学习笔记15-09-02】iOS中runtime机制
- nios系统generate时"Generation skipped because the system has validation errors"j解决方法
- iOS多个视频拼接合成为一个视频
- iOS中文路径转换URLEncode
- iOS 函数耗时测试
- Xcode iOS 进程启动失败:安全问题 Xcode process launch failed: Security or timed out等问题处理
- 苹果开发者账号申请与iTunesconnect中心问题联系电话
- iOS字体相关知识