iOS AV Foundation 二维码扫描 02 扫码

这篇博客介绍了如何利用AVFoundation框架在iOS应用中实现二维码的扫描功能。通过设置AVCaptureSession,添加AVCaptureMetadataOutput,并实现AVCaptureMetadataOutputObjectsDelegate协议,可以捕获并处理二维码数据。在扫描特定二维码后,程序会输出对应信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/yamingwu/article/details/44515625

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值