Swift系统自带二维码的扫描使用

前端之家收集整理的这篇文章主要介绍了Swift系统自带二维码的扫描使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

首先需要: import AVFoundation


// MARK: - 1.懒加载: 会,输入设备,输出设备,预览图层

//会

private lazy var session: AVCaptureSession = AVCaptureSession()

@H_502_35@

//拿到输入设备

private lazy var deviceInput: AVCaptureDeviceInput? = {

@H_502_35@

//获取摄像头

let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)

@H_502_35@

do {

//创建输入对象

let input = try AVCaptureDeviceInput(device: device)

return input

} catch {

//打印错误信息

print(error)

return nil

}

@H_502_35@ }()

@H_502_35@

//拿到输出设备

private lazy var output: AVCaptureMetadataOutput = AVCaptureMetadataOutput()

@H_502_35@

//创建预览图层

private lazy var previewLayer: AVCaptureVideoPreviewLayer = {

@H_502_35@

let layer = AVCaptureVideoPreviewLayer(session: self.session)

layer.frame = UIScreen.mainScreen().bounds

return layer

}()

@H_502_35@

//MARK: - 2.扫描二维码

func starScan() {

@H_502_35@

//先判断是否能将设备添加到回话中

if !session.canAddInput(deviceInput) {

return

}

@H_502_35@

//判断是否能够将输出添加到回话中

if !session .canAddOutput(output) {

return

}

@H_502_35@

//将输入和输出添加到回话中

session.addInput(deviceInput)

session.addOutput(output)

@H_502_35@

//设置输入能够解析的数据类型

//设置能解析的数据类型,一定要在输出对象添加到会员之后设置

output.MetadataObjectTypes = output.availableMetadataObjectTypes

@H_502_35@

//设置输出对象的代理,只要解析成功,就会通知代理

output.setMetadataObjectsDelegate(self,queue: dispatch_get_main_queue())

@H_502_35@

//添加预览图层

view.layer.insertSublayer(previewLayer,atIndex: 0)

@H_502_35@

//告诉session开始扫描

session.startRunning()

}

@H_502_35@

//MARK: - 3.实现代理 AVCaptureMetadataOutputObjectsDelegate

extension QRCodeViewController: AVCaptureMetadataOutputObjectsDelegate {

@H_502_35@

//只要解析到数据就会调用

func captureOutput(captureOutput: AVCaptureOutput!,didOutputMetadataObjects MetadataObjects: [AnyObject]!,fromConnection connection: AVCaptureConnection!) {

@H_502_35@

@H_502_35@ //获取扫描结果

//注意是: stringValue

print(MetadataObjects.last?.stringValue)

}

}

猜你在找的Swift相关文章