码迷,mamicode.com
首页 > 编程语言 > 详细

Swift 二维码扫描 简单实现

时间:2016-03-31 10:42:41      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

3.30看视频  学到了二维码简单的实现 还有一些动画的实现  今天就先记录一下二维码扫描的简单实现  不太好记手写一遍 学习的基础在于模仿嘛

创建一个实现二维码扫描的步骤

1.首先是懒加载创建 会话 输入设备  输出设备

    // 先倒入框架 AVFoundation 
    import AVFoundation
    //通过懒加载 创建输入设备 
    private lazy var deviceInput: AVCaptureDeviceInput? = {
        //获取设备摄像头
        let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
        //使用摄像头为输入设备  创建时需要try一下因为有可能拿不到 摄像头所以返回值有可能为空 该对象为可选(?)类型
        do{
            let input = try AVCaptureDeviceInput(device: device)
            return input
        }catch{
            print(error)
            return nil
        }
    }()
    //创建 会话/输出  比较简单 只需要创建一个对象
    private lazy var session: AVCaptureSession = AVCaptureSession()
    //创建 输出设备
    private lazy var deviceOutput: AVCaptureMetadataOutput = AVCaptureMetadataOutput()
这么第一步 就准备完毕 扫描二维码的 整体就是 输出设备通过 会话来 拿到 输入设备的获取的值 再解析

2.实现扫描二维码  输入输出 添加到会话

        //先判断是否能将 输入输出设备 添加到会话中
        if !session.canAddInput(deviceInput) {
            return
        }
        if !session.canAddOutput(deviceOutput){
            return
        }
        //将设备添加到 会话中
        session.addInput(deviceInput)
        session.addOutput(deviceOutput)

3.设置允许扫描类型

        //设置扫描类型  也就是设置输出设备能够解析的数据类型
          //设置类型时 必须先把设备添加到会话 否则崩溃
        deviceOutput.metadataObjectTypes = deviceOutput.availableMetadataObjectTypes
deviceOutput.availableMetadataObjectTypes 获取到所有的解析类型

4.实现代理 拿到扫描数据

          //设置代理 解析数据   queue线程 
        deviceOutput.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())

5.开始会话

        //开始 执行会话
        session.startRunning()

6.添加图层 实现预览

    //为了更好的操作体验 一般扫描二维码的时候都会加上 预览 和 二维码定位线   先实现预览比较简单  定位线学会了再更新
    //还是懒加载 
    private lazy var previewLzyer: AVCaptureVideoPreviewLayer = {
        //预览涂层 想要展示一个界面 界面展示数据  数据通过输入设备获取  会话中则存储了数据
        //注: 闭包 访问外界对象 则需要带上self
        let preview = AVCaptureVideoPreviewLayer(session: self.session)
        preview.frame = UIScreen.mainScreen().bounds
        return preview
    }()
再把预览添加到 二维码界面,但是有可能遮挡到某些空间 则
 view.layer.insertSublayer(<#T##layer: CALayer##CALayer#>, atIndex: <#T##UInt32#>)
插入一个layer视图 在index 第几层

 

Swift 二维码扫描 简单实现

标签:

原文地址:http://www.cnblogs.com/GGBigBong/p/5340134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!