美文网首页
iOS - 传感器

iOS - 传感器

作者: CDLOG | 来源:发表于2018-08-01 17:47 被阅读15次

    传感器集锦:指纹识别、运动传感器、加速计、环境光感、距离传感器、磁力计、陀螺仪

    1,距离传感器

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // [UIApplication sharedApplication].proximitySensingEnabled = YES;
        [UIDevice currentDevice].proximityMonitoringEnabled = YES;
        
        // 监听有物品靠近还是离开
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityStateDidChange) name:UIDeviceProximityStateDidChangeNotification object:nil];
    }
    
    - (void)proximityStateDidChange
    {
        if ([UIDevice currentDevice].proximityState) {
            NSLog(@"有物品靠近");
        } else {
            NSLog(@"有物品离开");
        }
    }
    

    2加速计,哪个方向有受力的加速度

    2.1,4.0以前Accelerometer

    @interface ViewController () <UIAccelerometerDelegate>
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 1.获取单例对象
        UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
        
        // 2.设置代理
        accelerometer.delegate = self;
        
        // 3.设置采样间隔
        [accelerometer setUpdateInterval:0.3];
    }
    
    - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
    {
        NSLog(@"x:%f y:%f z:%f", acceleration.x, acceleration.y, acceleration.z);
    }
    

    2,24.0以后CoreMotion

    push:主动把数据告诉外界
    pull:需要时直接读取

    #import <CoreMotion/CoreMotion.h>
    
    @interface ViewController ()
    
    /** 运动管理 */
    @property (nonatomic, strong) CMMotionManager *mgr;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 获取磁力计传感器的值
        // 1.判断磁力计是否可用
        if (!self.mgr.isMagnetometerAvailable) {
            return;
        }
        
        // 2.设置采样间隔
        self.mgr.magnetometerUpdateInterval = 0.3;
        
        // 3.开始采样
        [self.mgr startMagnetometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMMagnetometerData *magnetometerData, NSError *error) {
            if (error) return;
            
            CMMagneticField field = magnetometerData.magneticField;
            NSLog(@"x:%f y:%f z:%f", field.x, field.y, field.z);
        }];
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        // 1.获取加速计信息
        CMAcceleration acceleration = self.mgr.accelerometerData.acceleration;
        NSLog(@"x:%f y:%f z:%f", acceleration.x, acceleration.y, acceleration.z);
        
        // 2.获取陀螺仪信息
        CMRotationRate rate = self.mgr.gyroData.rotationRate;
        NSLog(@"x:%f y:%f z:%f", rate.x, rate.y, rate.z);
    }
    
    #pragma mark - 获取陀螺仪信息
    - (void)pullGyro
    {
        // pull
        // 1.判断陀螺仪是否可用
        if (![self.mgr isGyroAvailable]) {
            NSLog(@"手机该换了");
            return;
        }
        
        // 2.开始采样
        [self.mgr startGyroUpdates];
    }
    
    - (void)pushGyro
    {
        // push
        // 1.判断陀螺仪是否可用
        if (![self.mgr isGyroAvailable]) {
            NSLog(@"手机该换了");
            return;
        }
        
        // 2.设置采样间隔
        self.mgr.gyroUpdateInterval = 0.3;
        
        // 3.开始采样
        [self.mgr startGyroUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMGyroData *gyroData, NSError *error) {
            if (error) return;
            
            CMRotationRate rate = gyroData.rotationRate;
            NSLog(@"x:%f y:%f z:%f", rate.x, rate.y, rate.z);
        }];
    }
    
    #pragma mark - 获取加速计信息
    - (void)pullAccelerometer
    {
        // pull
        // 1.判断加速计是否可用
        if (!self.mgr.isAccelerometerAvailable) {
            NSLog(@"加速计不可用");
            return;
        }
        
        // 2.开始采样
        [self.mgr startAccelerometerUpdates];
    }
    
    - (void)pushAccelerometer
    {
        // push
        // 1.判断加速计是否可用
        if (!self.mgr.isAccelerometerAvailable) {
            NSLog(@"加速计不可用");
            return;
        }
        
        // 2.设置采样间隔
        self.mgr.accelerometerUpdateInterval = 0.3;
        
        // 3.开始采样
        [self.mgr startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { // 当采样到加速计信息时就会执行
            if (error) return;
            
            // 获取加速计信息
            CMAcceleration acceleration = accelerometerData.acceleration;
            NSLog(@"x:%f y:%f z:%f", acceleration.x, acceleration.y, acceleration.z);
        }];
    }
    
    #pragma mark - 懒加载
    - (CMMotionManager *)mgr
    {
        if (_mgr == nil) {
            _mgr = [[CMMotionManager alloc] init];
        }
        return _mgr;
    }
    

    3,摇一摇

    - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
    {
        NSLog(@"用户摇一摇");
    }
    
    - (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
    {
        // 摇一摇被打断(电话)
    }
    
    - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
    {
        // 摇一摇结束
    }
    
    

    4,计步器

    plist配置 Privacy - Motion Usage Description

    #import <CoreMotion/CoreMotion.h>
    
    @interface ViewController ()
    
    /** 计步器对象 */
    @property (nonatomic, strong) CMPedometer *counter;
    @property (weak, nonatomic) IBOutlet UILabel *stepLabel;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 1.判断计步器是否可用
        if (![CMPedometer isStepCountingAvailable]) {
            NSLog(@"计步器不可用");
            return;
        }
        // 2.开始计步
        [self.counter startPedometerUpdatesFromDate:[NSDate new] withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
            self.stepLabel.text = [NSString stringWithFormat:@"您一共走了%@步",pedometerData.numberOfSteps];
        }];
    }
    
    #pragma mark - 懒加载代码
    - (CMPedometer *)counter
    {
        if (_counter == nil) {
            _counter = [[CMPedometer alloc] init];
        }
        return _counter;
    }
    
    @end
    
    
    

    相关文章

      网友评论

          本文标题:iOS - 传感器

          本文链接:https://www.haomeiwen.com/subject/akzlvftx.html