苹果系统自带的二维码扫描
一、 创建扫描界面,跟其他界面搭建是一样的。
二、 设置扫描。
1. 首先判断当前设备是否支持扫描功能,虽然目前没有不支持的设备了,看似多此一举,但是必须做出判断,比如,模拟器就不支持扫描。
判断当前设备是否支持扫描2. 判断用户是否授权使用摄像头
用户权限3. 设置录像的输入输出流。
```
// Output
_captureOutput = [[AVCaptureMetadataOutput alloc]init];
[_captureOutput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
// Session
_captureSession = [[AVCaptureSession alloc]init];
[_captureSession setSessionPreset:AVCaptureSessionPresetHigh];
if ([_captureSession canAddInput:self.captureInput])
{
[_captureSession addInput:self.captureInput];
}
// BOOL iscan = [_captureSession canAddOutput:self.captureOutput];
if ([_captureSession canAddOutput:self.captureOutput])
{
[_captureSession addOutput:self.captureOutput];
}
CGRect rect = [self getScanCrop:CGRectMake(0.18 * SCREEN_WIDTH, 0.25 * SCREEN_HEIGHT, 0.64 * SCREEN_WIDTH, SCREEN_WIDTH * 0.64) readerViewBounds:self.view.bounds];
_captureOutput.rectOfInterest = rect;
```
4. 最后就是讲扫描层添加到 layer上启动扫描
```
NSArray *suppportArray = self.captureOutput.availableMetadataObjectTypes;
// if ([suppportArray containsObject:availab]) {
self.captureOutput.metadataObjectTypes =suppportArray;
_preview =[AVCaptureVideoPreviewLayer layerWithSession:self.captureSession];
_preview.videoGravity =AVLayerVideoGravityResizeAspectFill;
_preview.frame =self.view.layer.bounds;
[self.view.layer insertSublayer:_preview atIndex:0];
if (!suppportArray.count) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"此设备不支持二维码扫描" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alert show];
return;
}
[self.captureSession startRunning];
```