苹果系统自带的二维码扫描

2019-10-24  本文已影响0人  中秋梧桐语

一、 创建扫描界面,跟其他界面搭建是一样的。

二、 设置扫描。

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];

```

上一篇下一篇

猜你喜欢

热点阅读