接上篇,因为使用AVFoundation一直无法扫描我们的二维码,最后决定使用条形码。我又在AVCaptureMetadataOutput的metadataObjectTypes中加入了EAN13的条形码类型(我们生成条形码使用的类型),不幸的是,还是无法识别,但是,百度其他的EAN13类型的条形码都可以识别出来,此问题仍未解决。

最后,我决定试一下ZBar,bingo!效率挺高。下面介绍一下zbar的使用过程。

首先,使用cocopods在项目中集成zbar,然后在头文件中导入ZBarSDK,因为我需要自定义扫描界面,所以使用ZBarReaderView,如下:

其中scanCrop是设置有效区域的一个属性,相当于

AVCaptureMetadataOutput中的rectOfInterest(具体信息可查看我的上一篇博客),其他属性不再赘述。

下面说一下在使用zbar过程中遇到的问题:

1.在使用AVFoundation时,配置各个类的实例变量时需要使用异步线程防止阻塞主线程加载界面。在使用zbarreaderview时,如果不用异步线程也会出现阻塞,但是,如果使用异步线程的话,会出现一个问题:进入扫码界面到出现镜头过程中需要等待一段时间,并且这段时间会随着进入这个界面的次数增加而增长,我发现问题在ZBarReaderView的实现文件ZBarReaderViewImpl的_initWithImageScanner方法中self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];方法,但是问题还是没能解决(我真是太菜了,还请大神能指点一二),因为等待时间实在是无法接受,我又想到了另外一种方法:把添加扫描视图的方法从viewDidLoad移到viewDidAppear中,然后在ViewWillAppear中添加一个loading视图,这样点击进入扫描视图的页面的按钮时不需要等待,进入后出现loading,直到加载完成展示扫描视图。由于业务需要,扫描完成后,进入下一个页面进行操作,之后可以选择再次进入扫描视图,所以会再次执行viewDidAppear就会多次加载扫描视图,为了解决这个问题,我是用一个全局变量来保证扫描视图只加载一次。具体代码如下:

2.使用zbar进行扫描时,首次进入页面会镜头会出现抖动,具体原因不明,未解决。

总结:至此,扫描功能也算能够使用了,但是,由于个人能力有限,业务一再退让,问题还有很多。希望看到这篇博客的朋友能够帮忙解决一下,不胜感激。路漫漫其修远兮~~~

使用zbar进行二维码或条形码(一维码)扫描相关推荐

  1. java-zxing扫描二维码和条形码(一维码)

    安装zxing 导入jar包不需要dll 扫描 package zxing;import java.awt.Image; import java.awt.image.BufferedImage; im ...

  2. 2021-06-08-前端生成二维码和条形码(一维码)

    资源 链接: https://pan.baidu.com/s/1zG4Bd3i3d0wq87Tt2t1zgg 提取码: qghk 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超 ...

  3. 使用zbar识别二维码

    目录 1 说明 2 软件获取 3 在Windows下使用zbar 4 在Linux PC(Ubuntu Server 1604 64位)下使用zbar 4.1 无内存泄漏的示例代码 5 在ARM Li ...

  4. Zxing与 Zbar生成二维码最简单的实现方式

    Zxing与 Zbar生成二维码最简单的实现方式 导入依赖 implementation 'cn.bingoogolapple:bga-qrcode-zbar:1.2.1' 或者 implementa ...

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

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

  6. 背包(二维数组版和一维数组版)

    一:前言 这是动态规划的经典题型,那么我们也是 按照动态规划五步走的策略分析的 确定dp数组的含义以及下标的含义 确定dp数组的递推公式 确定dp数组的初始化 确定dp数组的遍历顺序 举例验证(如果不 ...

  7. java把二维转换为一维_在R语言中什么函数可以将二维数组转换成一维数组

    满意答案 vi31892i 2013.09.11 采纳率:44%    等级:11 已帮助:6956人 这好象是汇编语言的问题吧 举个例子吧 #include "iostream.h&quo ...

  8. python把二维列表转成一维列表

    python把二维列表转成一维列表 先把列表转成numpy数组,然后使用flatten()函数把数组扁平化. 示例代码如下: # !/usr/bin/python # -*- coding: utf- ...

  9. 获取二维元组的每一维数据

    获取二维元组的每一维数据 # python 2022/11/21/00:18 danci =(['剔透', '柔润', '柔滑', '无瑕', '透亮', '晶莹', '清透', '双唇', '紧实' ...

  10. 笔试题:js实现螺旋式循环二维数组并输出一维数组

    笔试题:js实现螺旋式循环二维数组并输出一维数组 github链接: https://github.com/JiayiChen012/Written-questions. // 以下两种方式实现螺旋式 ...

最新文章

  1. AndroidSDK结合SpringBoot实现支付宝支付功能
  2. SAP 预算控制业务集成
  3. 第十届蓝桥杯c语言b组试题,2019年第十届蓝桥杯(决赛)国赛B组C++(B)
  4. BLOG地址变更--博客园启用二级域名
  5. 当SRS遇到K8s:如何构建海量推流源站?
  6. C# 利用.NET 升级助手将.NET Framework项目升级为.NET 6
  7. 教你精确计算 I2C 上拉电阻阻值
  8. c语言 整型转bool,C语言的布尔类型(_Bool)【转】
  9. C#LeetCode刷题之#728-自除数(Self Dividing Numbers)
  10. 都说程序员穿衣就是这么丑,你该看看人家硅谷精英
  11. 机器学习算法中的F值(F-Measure)、准确率(Precision)、召回率(Recall)
  12. MonkeyScript使用教程
  13. 数据分析 | 异常数据识别小结
  14. codec engine代码阅读四---CE_DIR/examples/ti/sdo/ce/examles/codecs/videnc_copy
  15. 足疗小张和面向对象的7个设计原则
  16. 南航率先启用“手机登机”
  17. 判断web网站是否站库分离
  18. 分布式定时任务原理以及解决方案-指定时间执行定时任务
  19. 电力电子技术第二章总结
  20. Thinkpad X200 换屏记

热门文章

  1. xilinx的$clog2函数
  2. b spring的ioc概念简单介绍
  3. ArcGis克里金斯插值详解
  4. debian的自动化安装定制
  5. iOS 获取App的ipa包以及资源文件
  6. 用户查询意图检测(CIKM Competition数据挖掘竞赛夺冠算法陈运文)
  7. 国王的许诺 相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第1个格子中
  8. Centos服务器被挂马的一次抓马经历
  9. 廖雪峰讲python高阶函数-高阶函数
  10. Linux kill -9 和 kill -15 的区别