Swift系统自带二维码的扫描使用
2016-03-31 23:23
295 查看
首先需要: 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)
}
}
// 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)
}
}
相关文章推荐
- Apple Swift学习教程
- 介绍 Fedora 上的 Swift
- 批处理制作二维码生成器
- 使用jquery.qrcode.min.js实现中文转化二维码
- jquery插件qrcode在线生成二维码
- JavaScript生成二维码图片小结
- php制作中间带自己定义图片二维码的方法
- zbar解码二维码和条形码示例
- php使用qr生成二维码的示例分享
- php实现扫描二维码根据浏览器类型访问不同下载地址
- PHP微信开发之二维码生成类
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
- Swift编程中的泛型解析
- Swift中定义二维数组的方法及遍历方法示例
- Jquery 类网页微信二维码图块滚动效果具体实现
- 使用PHP生成二维码的方法汇总
- Perl生成纯HTML代码二维码实例
- Symfony生成二维码的方法
- 基于JavaScript实现生成名片、链接等二维码