
首先需要: import AVFoundation
// MARK: - 1.懒加载: 会话,输入设备,输出设备,预览图层
//会话
private lazy var session: AVCaptureSession = AVCaptureSession()
//拿到输入设备
private lazy var deviceinput: AVCaptureDeviceinput? = {
//获取摄像头
let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVIDeo)
do {
//创建输入对象
let input = try AVCaptureDeviceinput(device: device)
return input
} catch {
//打印错误信息
print(error)
return nil
}
}()
//拿到输出设备
private lazy var output: AVCaptureMetadataOutput = AVCaptureMetadataOutput()
//创建预览图层
private lazy var prevIEwLayer: AVCaptureVIDeoPrevIEwLayer = {
let layer = AVCaptureVIDeoPrevIEwLayer(session: self.session)
layer.frame = UIScreen.mainScreen().bounds
return layer
}()
//MARK: - 2.扫描二维码
func starScan() {
//先判断是否能将设备添加到回话中
if !session.canAddinput(deviceinput) {
return
}
//判断是否能够将输出添加到回话中
if !session .canAddOutput(output) {
return
}
//将输入和输出添加到回话中
session.addinput(deviceinput)
session.addOutput(output)
//设置输入能够解析的数据类型
//设置能解析的数据类型,一定要在输出对象添加到会员之后设置
output.MetadataObjectTypes = output.availableMetadataObjectTypes
//设置输出对象的代理,只要解析成功,就会通知代理
output.setMetadataObjectsDelegate(self,queue: dispatch_get_main_queue())
//添加预览图层
vIEw.layer.insertSublayer(prevIEwLayer,atIndex: 0)
//告诉session开始扫描
session.startRunning()
}
//MARK: - 3.实现代理 AVCaptureMetadataOutputObjectsDelegate
extension QRCodeVIEwController: AVCaptureMetadataOutputObjectsDelegate {
//只要解析到数据就会调用
func captureOutput(captureOutput: AVCaptureOutput!,dIDOutputMetadataObjects MetadataObjects: [AnyObject]!,fromConnection connection: AVCaptureConnection!) {
//获取扫描结果
//注意是: stringValue
print(MetadataObjects.last?.stringValue)
}
}
总结以上是内存溢出为你收集整理的Swift系统自带二维码的扫描使用全部内容,希望文章能够帮你解决Swift系统自带二维码的扫描使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)