ios-传感器简单介绍

在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);
        
    }];


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值