其实,网上有好多关于原生二维码扫描的教程,但是,我还是想自己记录一下自己再写这个原生二维码扫描及图片扫描的一些过程,及遇到的一些问题。
话不多说,直接进入正题,在没有原生二维码扫描的时候,我们大家都在用ZBar或者ZXing等第三方的二维码扫描库,接入简单,API也不复杂,集成起来也很方便,但是,就是感觉扫码速度太弱,还有就是ZBar这个库也不更新了,ZXing暂没有详细了解。(我在接触我们项目的时候,我们用的是ZBar,😊),由于之前对原生有所了解,索性就对产品说,更换原生,然后自己开始走上这条不是那么崎岖的道路,😀。
下面咱们就看一看我的代码,如有问题,欢迎指正,首先是我是把它封装成了一个View, 咱们先看的就是这个View的Public Method:
其中XPClickButtonType这个枚举用来区分View上面的几个button的,关于这几个简单的api,我就不多介绍了,都有注释的😯。
在一个就是关于这个View的两个代理方法,其实也很简单啦,
分别解释一下,第一个是点击View上面的button事件需要做的操作, 第二个就是关于二维码扫描结果的一个代理方法,是不是很简单?😊
下面就是具体m文件的实现了,其实都大同小异,主要说一下下面代码,就是限制扫描区域的,
详细代码可参考链接:点我呀。里面很多代码,可能都不需要的,毕竟每个公司的需求都不一样的。这个就那么多啦。
关于这个View的使用就是更简单啦,在cotroller里面实现这几行代码就行啦,
第一张图,懒加载这个View,第二张图,不要多说,你懂得,🙂。
下面就是这个View第二个代理的实现,这个很重要的哦,你想要的结果都在这里,
关于原生二维码扫描就基本上结束了,很简单的吧,下面来看一下扫描图片中的二维码,这里呢,我封装了一个类,下面就核心的代码说一下:
这里其中有个方法,由于现在的手机像素也来越高,拍出的照片也越来越大,导致图片中的二维码,没法识别,于是就写了一个方法来等比缩小图片的大小(关于等比例缩小图片的方法我就不用说了吧,知道的更好,不知道的度娘啊),已达到扫码的目的,(这个可能会有bug,目前我还没有发现,希望发现的告诉我哈,🙂),想必老司机已经知道是那个方法了吧。
其他就没有什么难度,都是一些简单的封装,我就不上代码了,希望大家自己封装封装,具体怎么用还很简单,这里就不赘述喽,好了,本人水平有限,若有问题,欢迎指正😯。