iOS 中二维码的扫描借用#import <AVFoundation/AVFoundation.h> 实现,会用到<AVCaptureMetadataOutputObjectsDelegate>这个代理,并会调用相机进行扫描,
具体实现步骤如下:
//1.创建捕捉会话 AVCaptureSession *session = [[AVCaptureSession alloc] init]; //2.添加一个输入源 AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; [session addInput:input]; self.session = session; //3.添加一个输出源 AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init]; [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; [session addOutput:output]; [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; //4.添加一个预览图层 AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayer layerWithSession:session]; layer.frame = self.view.bounds; [self.view.layer addSublayer:layer]; self.layer = layer; // 5.开启扫描 [session startRunning]; #pragma mark - 实现输出源的代理方法 - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { if (metadataObjects.count > 0) { AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject]; NSLog(@"%@", object.stringValue); [self.session stopRunning]; [self.layer removeFromSuperlayer]; } else { NSLog(@"获取数据失败"); } }