《iOS传感器应用开发最佳实践》是著名移动开发专家关东升倾力创作的iOS 7专业开发领衔之作,全面涵盖iOS 7传感器应用开发原理与项目实战的里程碑作品!《iOS传感器应用开发最佳实践》秉持“原创”与“分享”的IT人文精神,倾尽全力,将数年来的研发与培训经验毫无保留地呈现在本书中,全面深入剖析iOS 7最新的API,系统介绍了iOS主要的传感器应用开发的理论与实践:手势识别、加速度计、陀螺仪、指南针、磁力计、照相机、摄像头、音频设备访问、定位和蓝牙通信,以及iOS敏捷开发项目实战——增强现实版本铅锤应用等开发细节……不容错过。
本书采用基于iOS 7最新的API,系统介绍了iOS设备主要的传感器应用开发的相关知识。本书共分为9章,分别从编程原理与开发实践两个角度论述了手势识别、加速度计、陀螺仪、指南针、磁力计、照相机、摄像头、音频设备访问、定位和蓝牙通信,以及iOS敏捷开发项目实战——增强现实版本铅锤应用等。
本书适合从事iOS开发,尤其是传感器应用开发的读者阅读使用。为便于读者快速动手实践,本书配套提供了所有实例的源代码。
第3章加速度计与陀螺仪
在新的iOS设备中都内置了加速度计与陀螺仪两个传感器,它们可以感知设备的运动,通过这些传感器可以开发出很多有趣的应用和游戏。比如熟悉的水平尺应用和极品飞车游戏。水平尺应用如图31所示,它主要利用iOS设备的加速度计传感器检测设备的水平状态。极品飞车游戏如图32所示,它主要利用iOS设备的加速度计传感器和陀螺仪传感器检测设备的移动和旋转等变化。
图31水平尺应用
图32极品飞车游戏
3.1加速度计
加速度计是一种能够感应设备一个方向上线性加速度的传感器,广泛用于航空、航海、宇航及武器的制导与控制中。加速度计的种类很多,
图33iOS上三轴加速度计
在iOS设备中目前采用的是三轴加速度计,可以感应设备上X、Y、Z轴方向上线性加速度的变化。如图33所示,iOS设备三轴加速度计的坐标系是右手坐标系,即: 设备竖直向上,正面朝向用户,水平向右为X轴正方向,竖直向上为Y轴正方向,Z轴正方向是从设备指向用户方向。
有人将加速度计称之为“重力加速度计”,这种观点是错误的。作用于三个轴上的加速度是指所有加速度的总和,包括了由重力产生的加速度和用户移动设备产生的加速度。在设备静止的情况下,这时候的加速度就只是重力加速度。
3.1.1访问加速度计
访问iOS设备加速度的API有两个不同的阶段,以iOS 5为分水岭,在iOS 5之前主要使用UIAccelerometer和UIAccelerometerDelegate,而在iOS 5之后使用CoreMotion框架中的CMMotionManager等类,CoreMotion框架不仅可以获得设备的加速度,还可以获得设备的角速度(由陀螺仪传感器感应)。
1. 使用UIAccelerometer
通过UIAccelerometer和UIAccelerometerDelegate访问设备加速度的时候,一旦设置委托对象,应用程序就开始不断地轮询系统获得设备的X、Y和Z轴的加速度,返回的信息被封装在UIAcceleration中,UIAcceleration有3个属性:
■x,X轴上加速度,单位为g,1g = 9.81ms-2。
■y,Y轴上加速度,单位为g。
■z,Z轴上加速度,单位为g。
■timestamp,时间戳属性,用来表示事件发生的相对时间。
2. 使用CMMotionManager
在iOS 5之后获得加速度的API是使用CoreMotion框架中CMMotionManager等类,CMMotionManager中的startAccelerometerUpdates和startAccelerometerUpdatesToQueue:withHandler:方法可以获得设备的加速度,使用stopAccelerometerUpdates方法停止获取设备的加速度。无论采用什么方法,我们都应该适时地开启和关闭获取设备加速度,因为获取设备的加速度是非常耗电的操作。
第1章开篇综述
1.1本书结构
1.2本书中的约定
1.2.1实例代码约定
1.2.2图示的约定
第2章手势识别
2.1手势种类
2.2使用手势识别器
2.2.1视图对象与手势识别
2.2.2手势识别状态
2.2.3检测Tap
2.2.4检测Long Press
2.2.5检测Pan
2.2.6检测Swipe
2.2.7检测Rotation
2.2.8检测Pinch
2.3触摸事件与手势识别
2.3.1事件处理机制
2.3.2响应者对象与响应链
2.3.3触摸事件
2.3.4手势识别
本章小结
第3章加速度计与陀螺仪
3.1加速度计
3.1.1访问加速度计
3.1.2实例: 通过Accelerometer访问加速度计
3.1.3实例: 通过CMMotionManager访问加速度计
3.1.4数据的“滤波”
3.1.5实例: 数据的“滤波”
3.1.6感知设备方向
3.1.7实例: 感知设备方向
3.2陀螺仪
3.2.1访问陀螺仪
3.2.2检测晃动设备
3.2.3实例: 检测晃动设备
本章小结
第4章指南针与磁力计
4.1访问磁力计
4.1.1访问导航方面的API
4.1.2磁力计与设备方向
4.1.3实例: 指南针应用
4.2检测磁场
4.2.1检测磁场API
4.2.2实例: 特斯拉计应用
本章小结
第5章照相机与摄像头
5.1iOS设备摄像头
5.2图像抓取
5.2.1图像选择器
5.2.2实例: 照相机抓取图片
5.2.3编辑图片
5.2.4保存图片
5.2.5添加照相机图层
5.3视频捕获
5.3.1实例: 视频捕获
5.3.2使用UIImagePickerController捕获
5.3.3使用AVFoundation捕获
本章小结
第6章音频设备访问
6.1音频API介绍
6.2AVFoundation框架实现音频录制与播放
6.2.1音频播放
6.2.2实例: 音频播放
6.2.3音频录制
6.2.4实例: 音频录制
本章小结
第7章使用蓝牙
7.1Game Kit应用开发
7.1.1对等结构网络
7.1.2Game Kit API
7.1.3实例: 基于蓝牙对等网络通信
7.2低功耗蓝牙
7.2.1Core Bluetooth API
7.2.2中心角色
7.2.3外设角色
7.3实例: 低功耗蓝牙通信
7.3.1中心角色编程实现
7.3.2外设角色编程实现
7.4使用SensorTag开发蓝牙低功耗应用
7.4.1SensorTag开发套件
7.4.2实例: 我的温度计
本章小结
第8章定位
8.1获得用户的位置
8.1.1定位服务编程
8.1.2实例: 定位服务
8.1.3距离过滤器和精度
8.1.4启动和停止定位服务
8.1.5获得位置信息
8.1.6关于定位服务的测试
8.2地理信息编码与反编码
8.2.1地理信息反编码
8.2.2实例: 地理信息反编码
8.2.3地理信息编码查询
8.2.4实例: 地理信息编码查询
8.3微定位技术
8.3.1地理围栏
8.3.2iOS 7中的iBeacon技术
8.3.3实例: iBeacon技术实现微定位
8.4接近传感器
本章小结
第9章iOS敏捷开发项目实战——增强现实版本铅锤应用
9.1应用分析与设计
9.1.1应用概述
9.1.2需求分析
9.1.3原型设计
9.2iOS敏捷开发
9.2.1敏捷开发宣言
9.2.2iOS可以敏捷开发
9.2.3iOS敏捷开发一般过程
9.3任务1: 创建应用并初始化工程
9.3.1任务1.1: 创建PlumbBob工程
9.3.2任务1.2: 设置状态栏
9.3.3任务1.3: 设置设备支持方向
9.3.4任务1.4: 添加铅锤图片
9.4任务2: 铅锤功能
9.4.1任务2.1: 添加铅锤ImageView到主视图
9.4.2任务2.2: 通过加速度计传感器控制铅锤
9.5任务3: 增强现实功能
9.6任务4: 关于我们
本章小结