这篇博客是对上篇博客的补充,内容较少。
由于二维码扫描需要在真机上测试本人比较烂就不做效果图了。
下面是代码(代码中已经写了很清楚的注释)
// // ViewController.m // CX 二维码扫描 // // Created by ma c on 16/4/12. // Copyright © 2016年 bjsxt. All rights reserved. // #import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate> @end @implementation ViewController - (void)viewDidLoad { } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //创建捕捉会话 AVCaptureSession * session = [[AVCaptureSession alloc]init]; //添加输入设备 AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:@"AVMediaTypeVideo"]; AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; [session addInput:input]; //添加输出数据 AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init]; [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; [session addOutput:output]; //告诉元数据类型为二维码类型 //注意该方法在add后 否则崩溃 //测试需要真机稍有麻烦 就不截图了 [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; //添加扫描图层 AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayer layerWithSession:session]; layer.frame = CGRectMake(10,20, self.view.frame.size.width, 400); [self.view.layer addSublayer:layer]; //开始扫描 [session startRunning]; //下面的方法适当的时候操作 //停止扫描 // [session stopRunning]; //移除图层 // [layer removeFromSuperlayer]; } - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{ //metadataObjects 为扫描的后的数据 AVMetadataMachineReadableCodeObject * objc = [metadataObjects lastObject]; //我们想要的结果 NSLog(@"%@",objc.stringValue); } @end