iOS AV Foundation 二维码扫描 02 扫码
AVFoundation支持以下一维和二维码的扫描:
- QR code
- Aztec
- EAN13
- EAN8
- UPC-E
- PDF417
- Code 93
- Code 39
- Code 39 mode 41
QR code就是我们所熟知的二维码。
打开ViewController.m,添加以下实例变量:
AVCaptureMetadataOutput *_metadataOutput;当从视频帧中检测到元数据时,AVCaptureMetadataOutput会调用应用程序的回调函数。AV Foundation支持两种类型的元数据:机器可读的编码和人脸识别。
添加以下代码到setupCaptureSession的最后来实现对元数据的捕捉和处理:
_metadataOutput = [[AVCaptureMetadataOutput alloc] init]; dispatch_queue_t metadataQueue = dispatch_queue_create("com.yaming.ColloQR.metadata", 0); [_metadataOutput setMetadataObjectsDelegate:self queue:metadataQueue]; if([_captureSession canAddOutput:_metadataOutput]) { [_captureSession addOutput:_metadataOutput]; }这里,我们首先创建AVCaptureMetadataOutput的实例,然后为其创建一个dispatch queue,这样避免在回调函数被调用时,阻塞主线程。
接下来,声明本类遵循AVCaptureMetadataOutputObjectsDelegate协议:
@interface ViewController () <AVCaptureMetadataOutputObjectsDelegate>实现代理方法:
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { [metadataObjects enumerateObjectsUsingBlock:^(AVMetadataObject *obj, NSUInteger idx, BOOL *stop) { NSLog(@"Metadata: %@", obj); }]; }每当AVCaptureMetadataOutput类检测到新的元数据时,调用captureOutput方法,在captureOutput方法中,我们打印所有检测到的元数据。
修改startRunning方法,在最后添加如下代码:
_metadataOutput.metadataObjectTypes = _metadataOutput.availableMetadataObjectTypes;这样做的目的是设置要检测的元数据类型为所有类型。
编译运行,扫描以下二维码将得到如下输出:
2015-03-21 14:51:42.289 ColloQR[680:176124] Metadata: <AVMetadataMachineReadableCodeObject: 0x170221540, type="org.iso.QRCode", bounds={ 0.4,0.2 0.1x0.3 }>corners { 0.4,0.5 0.5,0.5 0.5,0.2 0.4,0.2 }, time 31026866447458, stringValue "iOS二维码扫描"这样我们就完成了使用AV Foundation进行二维码扫描的功能。从log中可以看到,有bounds和conrners信息,下一节我们将利用这个信息,当扫码成功时,为用户提供可视的反馈。
转载请注明出处:http://blog.csdn.net/yamingwu/article/details/44515625
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。