使用AVCaptureSession扫描二维码
在公司的项目里面有扫描二维码的需求,都是使用的ZBar,不过其实在iOS中也提供了二维码的扫描功能,而且速度那是相当的快,以前其实也写过这个功能,正好今天没什么事,就把使用AVCaptureSession扫描二维码的方法纪录下来,其实很简单,不过还是有一点需要注意的。
AVCaptureSession简介
iOS提供的这一系列的类的功能实在强大,不过我还没有仔细研究过,就我目前已知道的功能,比如各种条码,声音录制,视频录制等。今天要说的扫描二维码就是AVCaptureSession中扫描条码的一个小功能,使用超级简单,代码量很少。
步骤简介
使用这个类,基本只需要以下几个步骤:
1. 权限检查
2. 创建AVCaptureSession
3. 添加输入源
4. 添加输出
5. 添加预览图层
6. 开始捕捉
7. 结束捕捉
下面将按这个顺序一一说明。
扫描二维码
权限检查
在进行二维码扫描之前,最好是先对权限进行检查,如下所示:
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
如果authStatus的结果是AVAuthorizationStatusAuthorized,说明摄像头服务是可以使用的。就可以进行接下来的步骤了。如果authStatus的结果是AVAuthorizationStatusNotDetermined,则需要请求权限,使用如下代码来请求摄像头使用权限:
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
if(granted == NO);
<#Your Code Next Operation if Not Granted#>
}];
创建AVCaptureSession实例
AVCaptureSession是第一个要被创建的对象,所有的操作都要基于这一个session。创建它并没有什么特别的方法,使用init方法就可以。
captureSession = [[AVCaptureSession alloc] init];
添加输入源
输入源对应的类是AVCaptureInput,该类是一个抽象类,不能被直接实例化,在实际使用中,都是使用他的子类,比如AVCaptureDeviceInput,AVCaptureScreenInput(只能用于Mac),