最近在学习swift编程语言(http://www.maiziedu.com/course/ios/16-161/),在看视频学习swift编程语言时,发现有个二维码扫面案例的教程,非常的不错,其中还有一些动画的实现,今天就先记录一下二维码扫描的简单实现不太好记手写一遍学习的基础在于模仿嘛
创建一个实现二维码扫描的步骤
1.首先是懒加载创建会话输入设备输出设备
//先倒入框架AVFoundation
2.importAVFoundation
3.//通过懒加载创建输入设备
4.privatelazyvardeviceInput:AVCaptureDeviceInput?={
5.//获取设备摄像头
6.letdevice=AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
7.//使用摄像头为输入设备创建时需要try一下因为有可能拿不到摄像头所以返回值有可能为空该对象为可选(?)类型
8.do{
9.letinput=tryAVCaptureDeviceInput(device:device)
10.returninput
11.}catch{
12.print(error)
13.returnnil
14.}
15.}()
16.//创建会话/输出比较简单只需要创建一个对象
17.privatelazyvarsession:AVCaptureSession=AVCaptureSession()
18.//创建输出设备
19.privatelazyvardeviceOutput:AVCaptureMetadataOutput=AVCaptureMetadataOutput()
20.这么第一步就准备完毕扫描二维码的整体就是输出设备通过会话来拿到输入设备的获取的值再解析
if!session.canAddInput(deviceInput){
return
}
if!session.canAddOutput(deviceOutput){
//将设备添加到会话中session.addInput(deviceInput)
session.addOutput(deviceOutput)
3.设置允许扫描类型
@H_403_242@//设置扫描类型也就是设置输出设备能够解析的数据类型 @H_403_242@//设置类型时必须先把设备添加到会话否则崩溃 @H_403_242@deviceOutput.MetadataObjectTypes=deviceOutput.availableMetadataObjectTypes @H_403_242@deviceOutput.availableMetadataObjectTypes获取到所有的解析类型4.实现代理拿到扫描数据
@H_403_242@//设置代理解析数据queue线程 @H_403_242@deviceOutput.setMetadataObjectsDelegate(self,queue:dispatch_get_main_queue())5.开始会话
@H_403_242@//开始执行会话 @H_403_242@session.startRunning()6.添加图层实现预览
@H_403_242@//为了更好的操作体验一般扫描二维码的时候都会加上预览和二维码定位线先实现预览比较简单定位线学会了再更新 @H_403_242@//还是懒加载 @H_403_242@privatelazyvarpreviewLzyer:AVCaptureVideoPreviewLayer={ @H_403_242@//预览涂层想要展示一个界面界面展示数据数据通过输入设备获取会话中则存储了数据 @H_403_242@//注:闭包访问外界对象则需要带上self @H_403_242@letpreview=AVCaptureVideoPreviewLayer(session:self.session) @H_403_242@preview.frame=UIScreen.mainScreen().bounds @H_403_242@returnpreview @H_403_242@}()再把预览添加到二维码界面,但是有可能遮挡到某些空间则view.layer.insertSublayer(<#T##layer:CALayer##CALayer#>,atIndex:<#T##UInt32#>)插入一个layer视图在index第几层 原文链接:https://www.f2er.com/swift/324150.html