分享给大家一个秘诀:
要开始写功能,首先得查这方面的资料,然后得在脑海里模拟这个功能的实现过程,而不是没有思路拿起键盘就敲的,敲的改来改去,思路不通又全删了,再慢慢敲。这样的效率是特别慢的。
好了废话不多说了,下面我们开始剖析一下扫一扫功能的实现:
第一步,首先我们得确定就是用户的相机的权限获取。只有在获取了用户的相机的权限才能进行扫一扫。因为扫一扫是拿相机的扫的。
第一步又可以分为2个部分。
01.如果是第一次使用扫一扫功能,这里会出现一个弹框提示用户,提示用户我们这边需要获取您的相机权限。如果允许,这里开启才能进行扫一扫,如果拒绝是扫不了的。
02.如果是第二次,我们这边就需要检测一下我们是否有app权限,如果有我们这边不做任何操作,直接进行扫一扫,如果没有我们需要提示用户去设置里面开启权限。
第二步:也就是开启一些初始化的设置了。
1.系统框架的导入,扫一扫依赖的系统库是AVFoundation。
2.获取当前摄像设备,如果获取不到。这里我们需要提示用户您的设置没有摄像头。然后扫一扫功能就此停止。
3.初始化设备的输入流和输出流。并对输出流支持的格式做判断。我们这边主要兼容条形码和二维码就好了。并且让输出流是在主线程里面进行刷新,如果是异步的话,链接是会出问题的。
4.初始化采集流(采集流的作用在于捕捉输入流和输出流)。并设置高的分辨率。
5.这里做一个判断,当采集流能添加输入流的时候,添加输入流。让采集流能够添加输出流的时候输出,添加输出流。截止到目前,采集流和输入流以及输出流已经衔接上了。
6.初始化采集流进行扫描窗口的位置。也就是扫描的范围。
7.针对窗口位置进行绘制框。(可自定义样式)。
8.针对窗口的上下,画条线,针对线写一个由上二下的动画。(可自定义动画)。针对动画来回走动,我这边里采用的是定时器。
9.在扫描窗口位置下面进行自定义(可是手电筒功能,提示用户的消息等等)。
第三步:开始扫描。
让采集流开始扫描采集。
第四步:扫描出结果。
01.扫秒出了结果,我们需要停止扫描动画。也就是定时器的扫描。
02.此时为想拿结果做的事定义为一个方法。
03.这里提示一下用户,扫描已完成,然后给用户2个选择,重新扫描,二确定。
04.当用户点击重新扫描。
采集流的扫描开启,定时器的开启,也就是线的动画的上动画开启。
有结果了又会走向第四步又从01开始。
05.用户点击确定。
1.移除采集流窗口。
2.销毁定时器。
3.调用想做的事情的那个方法。
至此扫一扫功能的整体模式就出来了。想要源码的可以私下找我拿。
网友评论