ios-传感器简单介绍

来源:互联网 发布:办公软件英文怎么说 编辑:程序博客网 时间:2024/05/16 17:58

在ios设备中都内置了一些传感器,什么是传感器?其实就是一种感应、检测的装置,就好比iphone上都有可以自动去调整手机的亮度,其实就是依赖于光线传感器的。

当然iphone中肯定不止这一个,比如说还有什么距离传感器啊,磁力计传感器,内部的温度传感器,加速度传感器等等。当然Mac电脑也是有传感器的,最简单的例子就是

背光键盘会在光线暗的时候打开。距离传感器的话就比如说是我们打电话的时候,人脸靠近的时候屏幕会变黑掉,当我们脸原理的时候又会自动亮起来。再比如说磁力计传感器,可以用于感应地球的磁场,获得方向的信息。

下面我们来写下怎么样去使用距离传感器去监听这个距离的远近,代码如下,首先是先去开启距离传感器的功能,然后再去注册通知,去监听

 //1、开启距离传感器的功能    [UIDevice currentDevice].proximityMonitoringEnabled = YES;    //2、注册通知,监听通知    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(proximityStateDidChangeNotification) name:UIDevice    ProximityStateDidChangeNotification object:nil];//监听方法-(void)proximityStateDidChangeNotification{    //3、获取通知的值,如果有东西靠近的就会去关闭屏幕远离之后会再次的开启    if([UIDevice currentDevice].proximityState)    {        NSLog(@"有人靠近");    }    else    {        NSLog(@"有人离开");    }}

加速计对的原理其实就是检测设备在X、Y、Z轴上的加速度,也就是哪个方向有力的作用。因为力就会产生加速度。我们如果想要去检测的话,首先就得导入Core Motion这个框架,在Core Motion中获取数据有两种方式,一个push实时拿数据,拿的频率会比较高,看你自己设定的时间,另外一个是pull是需要的时候再去主动的去拿数据。

我们想要通过加速计在Core Motion中通过push方式拿数据的步骤就是

1、创建一个运动管理者的对象

2、判断加速计是否可用、

3、设置采集数据的时间间隔

4、开始采集数据

这里需要注意的是z轴手机反过来水平放置为1 正面朝上水平放置为-1 y轴竖着放置为-1 ,倒置竖着放为1 手机home键在左边横着放x值为1,在右边则为-1, 我们只要快速的去移动手机这个值就会变大。当然要看你方向朝着那边了。


 //1、首先先创建CMMotionManager对象    self.motionMgr = [CMMotionManager new];        //2、判断加速计是否可用    if(![self.motionMgr isAccelerometerAvailable])    {        return;    }    //3、设置采样间隔    self.motionMgr.accelerometerUpdateInterval = 1;        //4、开始采样,这里我们是让在子线程上执行,因为需要调用很多次    [self.motionMgr startAccelerometerUpdatesToQueue:[NSOperationQueue new] withHandler:^(CMAccelerometerData * _Nullable     accelerometerData, NSError * _Nullable error) {    //5、获取加速计数据        CMAcceleration acceleration = accelerometerData.acceleration;                NSLog(@"x: %f, y: %f, z: %f",acceleration.x,acceleration.y,acceleration.z);    }];
我们还可以通过Pull方式来获取,就是我们在需要去取数据的时候再去进行获取就可以了,其实前两步步骤都一样区别就在于后面

 //1、首先先创建CMMotionManager对象    self.motionMgr = [CMMotionManager new];    //2、判断加速计是否可用    if(![self.motionMgr isAccelerometerAvailable])    {        return;    }    //3、开始采样    [self.motionMgr startAccelerometerUpdates];-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{    NSLog(@"%@",self.motionMgr.accelerometerData);}

陀螺仪用来检测转动的角速度,用法其实也差不多的下面就只举一个Push方式了

//1、首先先创建CMMotionManager对象    self.motionMgr = [CMMotionManager new];       //2、判断陀螺仪是否可用    if(![self.motionMgr isGyroAvailable])    {        return;    }    //3、设置采样间隔    self.motionMgr.gyroUpdateInterval = 1;        //4、开始采样,这里我们是让在子线程上执行,因为需要调用很多次    [self.motionMgr startGyroUpdatesToQueue:[NSOperationQueue new] withHandler:^(CMGyroData * _Nullable gyroData, NSError *     _Nullable error) {                //5、获取陀螺仪数据        CMRotationRate rotationRate =  gyroData.rotationRate;                NSLog(@"x: %f, y: %f, z: %f",rotationRate.x,rotationRate.y,rotationRate.z);    }];
磁力计可以检测磁场的变化,可以用于导航

//1、首先先创建CMMotionManager对象    self.motionMgr = [CMMotionManager new];       //2、判断磁力计是否可用    if(![self.motionMgr isMagnetometerAvailable])    {        return;    }    //3、设置采样间隔    self.motionMgr.magnetometerUpdateInterval = 1;        //4、开始采样,这里我们是让在子线程上执行,因为需要调用很多次    [self.motionMgr startMagnetometerUpdatesToQueue:[NSOperationQueue new] withHandler:^(CMMagnetometerData * _Nullable magnetometerData, NSError * _Nullable error) {                //5、获取磁力计数据        CMMagneticField  magneticField =  magnetometerData.magneticField;                NSLog(@"x: %f, y: %f, z: %f",magneticField.x,magneticField.y,magneticField.z);            }];


原创粉丝点击