1. 二维码扫描
在调用二维码扫描之前,首先导入头文件:AVFoundation/AVFoundation.h,遵循其协议:AVCaptureMetadataOutputObjectsDelegate。并且定义所需要的device、session、input、output、videoPreviewLayer、backgroundView、interestRect,如下所示:
@property(nonatomic, strong) AVCaptureDevice *device;
@property(nonatomic, strong) AVCaptureSession *session;
@property(nonatomic, strong) AVCaptureDeviceInput *input;
@property(nonatomic, strong) AVCaptureMetadataOutput *output;
@property(nonatomic, strong) AVCaptureVideoPreviewLayer *videoLayer;
@property(nonatomic, strong) ContextView *backgroundView;
@property(nonatomic, assign) CGRect interestRect;
之后设置device、input、output、session、videoPreviewLayer,并且开启二维码扫描,如下:
- (void)opentAVCaptureSession {
NSError *inputError = nil;
self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:&inputError];
if (inputError) {
NSLog(@"AVCaptureDeviceInput Error:%@",inputError.localizedDescription);
}
self.output = [[AVCaptureMetadataOutput alloc] init];
[self.output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
self.session = [[AVCaptureSession alloc] init];
[self.session setSessionPreset:AVCaptureSessionPresetHigh];
[self.session addInput:self.input];
[self.session addOutput:self.output];
self.output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
self.videoLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
self.videoLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
self.videoLayer.frame = self.view.bounds;
[self