iOS开发学习之路【高级主题】——传感器编程

简介

iOS SDK 中提供了四种设备传感器:

  • 加速度传感器 Accelerometer
  • 陀螺仪Gyroscope
  • 磁力传感器 Magnetometer
  • 设备移动传感器 Device motion

传感器编程的API框架是 CoreMotion.framework,使用时必须添加该框架。

传感器编程的核心类是 CMMotionManager,可以调用startXXX和stopXXX方法对不同传感器开始更新和停止更新。

检测传感器是否可用

    CMMotionManager *manager = [[CMMotionManager alloc]init];
    BOOL flog = manager.accelerometerAvailable;
    NSLog(@"%@",flog?@"加速度传感器可以使用":@"加速度传感器无法使用");
    
    flog = manager.gyroAvailable;
    NSLog(@"%@",flog?@"陀螺仪可以使用":@"陀螺仪无法使用");
    
    flog = manager.deviceMotionAvailable;
    NSLog(@"%@",flog?@"设备移动传感器可以使用":@"设备移动传感器无法使用");
    
    flog = manager.magnetometerAvailable;
    NSLog(@"%@",flog?@"磁力传感器可以使用":@"磁力传感器无法使用");

在这里插入图片描述

加速度传感器

加速度传感器是根据x、y和z三个方向来检测在设备位置的改变。

加速计以相对于自由落体的方式度量加速度。
在这里插入图片描述

@interface ViewController ()
// 实例化CMMotionManager
@property(nonatomic, strong)CMMotionManager *manager;
@end
  
- (IBAction)start:(UIButton *)sender {
 		// 1.加速度传感器
    // 调用startAccelerometerUpdatesToQueue方法,从accelerometerData中获取数据
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    [self.manager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
        CMAcceleration a = accelerometerData.acceleration;
        NSLog(@"[%f,%f,%f]",a.x, a.y, a.z);
    }];
    
}
- (IBAction)stop:(UIButton *)sender {
  	// 1.加速度传感器
    // 调用stopAccelerometerUpdates方法停止
    [self.manager stopAccelerometerUpdates];
    
}

陀螺仪

陀螺仪将报告设备绕x、y、z轴的旋转速度,单位为弧度每秒;

2弧度等于1圈,所以陀螺仪返回读数2.0表示设备绕相应的轴每秒旋转一圈。

加速度传感器和陀螺仪传感器的区别

​ 仅当设备的朝向相对于重力的方向发生变化时,加速计才能检测的到;而无论设备处于什么朝向,只要它在旋转,陀螺仪都能检测的到。

    // 2.陀螺仪传感器
    [self.manager startGyroUpdatesToQueue:queue withHandler:^(CMGyroData * _Nullable gyroData, NSError * _Nullable error) {
        CMRotationRate r = gyroData.rotationRate;
        NSLog(@"[%f,%f,%f]",r.x, r.y, r.z);
    }];

    // 2.陀螺仪传感器
    [self.manager stopGyroUpdates];

磁力传感器

    // 3.磁力传感器
    [self.manager startMagnetometerUpdatesToQueue:queue withHandler:^(CMMagnetometerData * _Nullable magnetometerData, NSError * _Nullable error) {
        CMMagneticField m = magnetometerData.magneticField;
        NSLog(@"[%f,%f,%f]",m.x, m.y, m.z);
    }];

    // 3.磁力传感器
    [self.manager stopMagnetometerUpdates];

设备移动传感器

DeviceMotion

【demo】通过加速传感器控制图片移动

  • 添加一张图片,调整到适当大小
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    [self.manager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
        // 多线程,防止卡顿
        dispatch_sync(dispatch_get_main_queue(), ^{
            
            // 获取当前图片的frame属性
            CGRect myframe = self.myImage.frame;
            // 将当前传感器x值赋值给图片的x
            myframe.origin.x += accelerometerData.acceleration.x*20;
            // 判断图片x是否越界
            if(!CGRectContainsRect(self.view.bounds, myframe)){
                myframe.origin.x = self.myImage.frame.origin.x;
            }
            // 将当前传感器y值赋值给图片的y
            myframe.origin.y -= accelerometerData.acceleration.y*20;
            // 判断图片y是否越界
            if(!CGRectContainsRect(self.view.bounds, myframe)){
                myframe.origin.y = self.myImage.frame.origin.y;
            }
            // 更新frame属性
            self.myImage.frame = myframe;
        });
        
    }];
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  在iOS应用开发中有很多涉及硬件访问和传感器编程。本书我们将向大家介绍苹果iOS设备主要的传感器应用开发。本书是我们智捷iOS课堂团队编写iOS系列丛书中的一本,目的是使一个有iOS开发基础的程序员通过本书的学习,能够开发iOS 硬件访问和传感器应用的程序。另外,对于没有iOS开发基础读者,我们推荐先阅读我们已经出版的《iOS开发指南——从0基础到App Store上线》(网站:http://www.iosbook1.com),这两本书都是我们编写的,知识体系衔接的很好。 更多关于本书内容请关注本书网站http://www.51work6.cn,本书页面http://www.51work6.cn/?page_id=1426 更多iOS开发相关视频教程请关注http://v.51work6.com    本书是介绍了iOS设备主要的传感器应用开发的相关知识,其中包括手势识别、加速度计、陀螺仪、指南针、磁力计、照相机、摄像头、音频设备访问、定位和蓝牙通信等。而且全部采用基于iOS 7最新的API。    全书分为9章:开篇综述、手势识别、加速度计与陀螺仪、指南针与磁力计、照相机与摄像头、音频设备访问、使用蓝牙、定位和iOS敏捷开发项目实战——增强现实版本铅锤应用。    第2章介绍了手势识别,通过两种方式实现iOS常用手势,这些手势包括了:Tap(点击)、Long Press(长按)、Pan(拖动)、Swipe(滑动)、Rotation(旋转)和Pinch(手指的合拢和张开)。    第3章介绍了加速度计与陀螺仪,加速度计与陀螺仪是可以感知设备运动的两个传感器,通过这些传感器,我们可以开发出很多有趣的应用和游戏。    第4章我们介绍了磁力计,磁力计可以感知周围的磁场,可以开发指南针、罗盘等导航应用,还可以开发特斯拉计(或高斯计)等感知磁场强度的应用等。    第5章我们介绍了照相机与摄像头,对于iOS设备,它们事实上是一个硬件,这一章中我们介绍了图片抓取和视频捕获等技术。    第6章我们介绍了音频设备访问,音频的输入是通过麦克风设备实现,而音频的输出是通过扬声器设备实现的。本章我们介绍AVFoundation框架实现音频播放和音频录制。    第7章我们介绍了使用蓝牙,在蓝牙4.0之后将通信模式分为高速和低速类型。高速类型是传统蓝牙,在iOS中高速蓝牙通信开发可以通过Game Kit实现。低速类型被称为低功耗蓝牙(BLE Bluetooth low energy),可以连接一些量测型传感器,例如:心率监视器、血压计和温度计等,开发BLE可以通过CoreBluetooth.framework实现。本章我们重点介绍Game Kit和低功耗蓝牙通讯。    第8章我们介绍了定位技术,介绍了iOS设备如何实现定位应用开发,其中包括:定位服务编程、地理信息编码和地理信息反编码。此外,还介绍了苹果的微定位技术iBeacon,以及接近传感器。    第9章是项目实战,通过增强现实版本铅锤应用介绍了iOS敏捷开发过程。本项目中用到了视频捕获实现的增强现实技术,还有加速度计等传感器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值