swift编程语言简单开发二维码扫描

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift编程语言简单开发二维码扫描相关的知识,希望对你有一定的参考价值。

最近在学习swift编程语言(http://www.maiziedu.com/course/ios/16-161/, 在看视频学习swift编程语言时,发现有个二维码扫面案例的教程,非常的不错,其中还有一些动画的实现 今天就先记录一下二维码扫描的简单实现  不太好记手写一遍 学习的基础在于模仿嘛

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

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

// 先倒入框架 AVFoundation 

2.    import AVFoundation

3.    //通过懒加载 创建输入设备 

4.    private lazy var deviceInput: AVCaptureDeviceInput? = {

5.        //获取设备摄像头

6.        let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)

7.        //使用摄像头为输入设备  创建时需要try一下因为有可能拿不到 摄像头所以返回值有可能为空 该对象为可选(?)类型

8.        do{

9.            let input = try AVCaptureDeviceInput(device: device)

10.            return input

11.        }catch{

12.            print(error)

13.            return nil

14.        }

15.    }()

16.    //创建 会话/输出  比较简单 只需要创建一个对象

17.    private lazy var session: AVCaptureSession = AVCaptureSession()

18.    //创建 输出设备

19.    private lazy var deviceOutput: AVCaptureMetadataOutput = AVCaptureMetadataOutput()

20.这么第一步 就准备完毕 扫描二维码的 整体就是 输出设备通过 会话来 拿到 输入设备的获取的值 再解析

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编程语言简单开发二维码扫描的主要内容,如果未能解决你的问题,请参考以下文章

Swift AVFoundation 二维码扫描和生成

Swift:使用系统AVFoundation实现二维码扫描和生成

如何用MediaCapture解决二维码扫描问题

使用IOS7原生API进行二维码条形码的扫描

iOS开发-二维码扫描和应用跳转

android开发 如何实现扫描本地二维码图片