电脑
其实要实现扫一扫也有很多的第三方的库,ZBar SDK 和谷歌推出的开源项目ZXing也都是不错的呢。如果想要使用这些第三方库的可以自己去下,然后看例子就好了。由于我这里就只是简单的扫一扫二维码,也不用在相册里照图片扫,所以苹果自带的就好了,但是要注意的是,苹果这个自带的扫一扫只有iOS 7以后才可以。
好了,废话不多说了,现在开始来新建我们的项目。直接打开新建,如果已经打开了可以command + shift + 1 来新建我们的项目。这里项目名称就随便取好了,我这里就取名为“扫一扫”。但是有说法是最好不要用中文名,我这里就是测试,所以取名比较随意,具体的话还是根据自己需求来取名吧,还有就是要注意取名的规范性。还有就是下边的语言如果你习惯用OC就OC,喜欢swift就swift吧。我这里就暂时用OC来来写。所以language这儿我就选择Objective-C。
这个时候打开我们的main.storyboard,看到里边的viewcontroller的视图是超级大的一个,不是很符合我们平时看到的手机的样子,所以这个时候我们需要改一下这个的样子。其实很简单,直接关闭size classes就可以了。其实size classes是一个非常有用的东西,有空可以去多了解一下,我这里就是单纯的为了测试一下扫一扫的功能而已,所以我才给删除了。具体关闭size classes的方法如图所示:
现在我们需要给扫一扫一个出发的实际,也就是我们的项目不能是一运行起来就是打开相机在扫一扫,这个不符合常理。我们应该是点击了扫一扫然后才会触发这个动作。所以我这里我们在viewcontroller里边添加一个按钮控件,如果你比价喜欢纯代码就纯代码,我还是比较喜欢拖拉拖去,所以我们直接在storyboard里退拽一个按钮,然后连接按钮的事件到控制器里边去。具体如图所示:
添加好了button的方法之后,我们就在刚刚我们写的方法里边编写我们的扫一扫功能就好了。现在先添加好我们需要的系统库,只有先添加了才能进行后边的操作。不然直接写后边的操作不光不会有提示,而却会报错。在viewcontroller里边#import
现在来设置我们的AVCaptureSession和AVCaptureVideoPreviewLayer。AVCaptureVideoPreviewLayer是用来显示信息的,而AVCapture呢,就是用来管理输入输出流的。这俩都是在扫一扫里边所不可或缺的。具体的设置方法如图所示:
这一步是非常关键的一步了,就是遵守我们实现扫一扫是的协议,然后读取输入流,也就是开始我们的扫一扫动作。实例化拍摄设备、设置输入设备、设置元数据、添加拍摄会话、视频预览图层、还有就是启动会话。具体如图所示:
到这一步我们还没有完成,不能运行我们的程序。刚刚我们只是遵守了协议,但是还没有实现方法,也就是获取到我们捕获的数据。由于我们的扫一扫如果不变比就会一直扫,所以应该在我们完成了扫描,获取到了我们的数据时候停止会话stopRunning,然后删除预览图层。在这里我们还可以对我们得到的扫描结果进行加工处理。如图所示:
现在我们就可以运行我们的程序的,但是需要注意的是扫一扫是必须在真机上才可以运行的,不像我们平时的程序可以直接在模拟器上边来运行。如果你可以真机测试就找个二维码试一下吧,如果你的每一步都是根据我的要求来的,肯定是不会出现什么差错的了。