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

iOS AV Foundation 二维码扫描 02 扫码相关推荐

  1. iOS原生实现二维码扫描

    iOS原生实现二维码扫描 最近项目上需要开发扫描二维码进行签到的功能,主要用于开会签到的场景,所以为了避免作弊,我们再开发时只采用直接扫描的方式,并且要屏蔽从相册读取图片,此外还在二维码扫描成功签到时 ...

  2. iOS原生实现二维码拉近放大

    http://www.cocoachina.com/ios/20180416/23033.html 2018-04-16 15:34 编辑: yyuuzhu 分类:iOS开发 来源:程序鹅 8 300 ...

  3. iOS相册图片二维码识别

    前言:最近客户要求开发一个功能,类似微信长按图片识别图片中的二维码,一开始我使用了ZXingObjC,但是完成后被测试出有些二维码识别不了,所以只能另寻它法,之后更换为苹果系统自带的识别图片二维码的功 ...

  4. 二维码和app扫码下载

    文章目录 二维码基本原理 二级码生成 在线二维码生成 java代码生成二维码 前端二维码生成 app扫码下载 二维码基本原理 参考: https://cli.im/help/48235 二维条码是指在 ...

  5. wechat-0050,微信公众号,带参数的二维码获取与扫码事件推送

    demo:https://github.com/wenrongyao/wechat-demo 摘要:这篇帖子讲述如何获取带参数的二维码,以及扫码带参数的二维码后的事件接收. 微信开发者文档:https ...

  6. 微信生成带参数的二维码,合成海报,扫码后推送小程序?

    微信服务号渠道二维码功能,支持生成带参数二维码,合成海报二维码,微信扫码后推送内容:结合微号帮平台48小时信息推送,推送微信小程序. 带参二维码 海报二维码 微信扫码后回复 48小时信息推送 在微号帮 ...

  7. vue前端生成二维码,实现扫码下载功能

    vue前端生成二维码,实现扫码下载功能 首先需要安装一个插件 npm install --save qrcodejs2 然后在需要的页面引入插件,最后使用 <template><di ...

  8. uni-app二维码、条形码扫码自定义

    uni-app二维码.条形码扫码自定义 - DCloud问答 https://github.com/xiaowang1314/uniapp-plugin-collections/blob/master ...

  9. Android二维码名片生成扫码识别

    功能描述: 填入联系人信息,动态生成二维码名片,长按二维码保存,打开扫码识别内容.app实现了在android6.0或以上动态权限申请功能,适合新手研究.搭建方法请看入门教程菜单中的androidst ...

最新文章

  1. 算法---Lru缓存(Java)
  2. 最终的动画函数封装(2)
  3. 【转载】挖坑浪费时间
  4. Lovesource博士:或者我是如何学会不再担心和热爱开放的
  5. C Runtime Library来历, API, MFC, ATL关系
  6. C++多态的练习——编写一个计算器项目
  7. Java语言的发展史
  8. 【升级版】和秋叶一起学Office
  9. 2021-07-28 cad贱人工具箱5.8
  10. 经纬度5位数和6位数差多少_经度和纬度的最大长度是多少?
  11. 直播系统源码搭建、手机直播源码APP平台开发制作
  12. 设置redis key的expire过期时间
  13. .NET应用程序 全局RGB效果(VB.NET示例)
  14. WebForm水印照片
  15. python爬虫代理ip_Python爬虫如何获取代理ip及ip验证?
  16. swpuctf 2021
  17. C# 将一种类型的数组转换为另一种类型的数组
  18. 单招计算机网络考什么,单招考什么内容 单招一般考什么科目
  19. 如何进入游戏服务器修改资料,怎么修改游戏服务器的信息
  20. android studio中写中文注释时,输入法不跟随光标问题

热门文章

  1. NB-IOT电信云北向开发,电信天翼物联网平台对接应用服务
  2. CDH启动出现cloudera-scm-server一直挂掉
  3. 什么是范数,及其对应的 “曼哈顿距离“、“欧式距离“、“闵氏距离“、“切比雪夫距离“
  4. 【目标流畅阅读文献_语法篇】1.3简单句_动词时态
  5. AdGuard更多规则推荐
  6. 【组合数学】递推方程 ( 特征方程与特征根 | 特征方程示例 | 一元二次方程根公式 )
  7. 想带好团队,要先学会使用GTD
  8. SOC2- 安全性、可用性、进程完整性、机密性和隐私性五大控制属性
  9. HCNP-路由交换:GRE(通用路由封装协议)
  10. python的永久存储——pickle‘泡菜’ ,‘腌制’天气查询脚本