《OC专栏》

简单功能扫一扫-思想剖析 by:西瓜

2018-06-08  本文已影响44人  不够果断是种癌

分享给大家一个秘诀:

要开始写功能,首先得查这方面的资料,然后得在脑海里模拟这个功能的实现过程,而不是没有思路拿起键盘就敲的,敲的改来改去,思路不通又全删了,再慢慢敲。这样的效率是特别慢的。

好了废话不多说了,下面我们开始剖析一下扫一扫功能的实现:

第一步,首先我们得确定就是用户的相机的权限获取。只有在获取了用户的相机的权限才能进行扫一扫。因为扫一扫是拿相机的扫的。

第一步又可以分为2个部分。

01.如果是第一次使用扫一扫功能,这里会出现一个弹框提示用户,提示用户我们这边需要获取您的相机权限。如果允许,这里开启才能进行扫一扫,如果拒绝是扫不了的。

02.如果是第二次,我们这边就需要检测一下我们是否有app权限,如果有我们这边不做任何操作,直接进行扫一扫,如果没有我们需要提示用户去设置里面开启权限。

第二步:也就是开启一些初始化的设置了。

1.系统框架的导入,扫一扫依赖的系统库是AVFoundation。

2.获取当前摄像设备,如果获取不到。这里我们需要提示用户您的设置没有摄像头。然后扫一扫功能就此停止。

3.初始化设备的输入流和输出流。并对输出流支持的格式做判断。我们这边主要兼容条形码和二维码就好了。并且让输出流是在主线程里面进行刷新,如果是异步的话,链接是会出问题的。

4.初始化采集流(采集流的作用在于捕捉输入流和输出流)。并设置高的分辨率。

5.这里做一个判断,当采集流能添加输入流的时候,添加输入流。让采集流能够添加输出流的时候输出,添加输出流。截止到目前,采集流和输入流以及输出流已经衔接上了。

6.初始化采集流进行扫描窗口的位置。也就是扫描的范围。

7.针对窗口位置进行绘制框。(可自定义样式)。

8.针对窗口的上下,画条线,针对线写一个由上二下的动画。(可自定义动画)。针对动画来回走动,我这边里采用的是定时器。

9.在扫描窗口位置下面进行自定义(可是手电筒功能,提示用户的消息等等)。

第三步:开始扫描。

让采集流开始扫描采集。

第四步:扫描出结果。

01.扫秒出了结果,我们需要停止扫描动画。也就是定时器的扫描。

02.此时为想拿结果做的事定义为一个方法。

03.这里提示一下用户,扫描已完成,然后给用户2个选择,重新扫描,二确定。

04.当用户点击重新扫描。

采集流的扫描开启,定时器的开启,也就是线的动画的上动画开启。

有结果了又会走向第四步又从01开始。

05.用户点击确定。

1.移除采集流窗口。

2.销毁定时器。

3.调用想做的事情的那个方法。

至此扫一扫功能的整体模式就出来了。想要源码的可以私下找我拿。

上一篇 下一篇

猜你喜欢

热点阅读