SWIFT Scan QRCode

SWIFT中扫描QRCode代码如下,照着敲一次再看下API的注释应该就没问题了。

import UIKit
import Foundation
import AVFoundation

class ViewController: UIViewController,AVCaptureMetadataOutputObjectsDelegate,UIAlertViewDelegate {

    let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    let session = AVCaptureSession()
    var layer:AVCaptureVideoPreviewLayer?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.grayColor()
        let lblIntroduction = UILabel(frame: CGRectMake(10, 80, 300, 50))
        lblIntroduction.text = "Scan QRCode"
        lblIntroduction.textColor = UIColor.whiteColor()
        self.view.addSubview(lblIntroduction)

        //let imageView = UIImageView(frame: CGRectMake(10, 140, 300, 300))
        //imageView.image = UIImage(named: "pick_bg")
        //self.view.addSubview(imageView)
                //add scan line effect        let line = UIView(frame: CGRectMake(20, 150, 280, 1))        line.backgroundColor = UIColor.yellowColor()        self.view.addSubview(line)                UIView.animateWithDuration(2.5, delay: 0, options: UIViewAnimationOptions.Repeat, animations: { () -> Void in              line.frame = CGRectMake(20, 430, 280, 1)            }, completion: nil)

        setupCamera()
    }

    func setupCamera() {
        //An AVCaptureSession preset suitable for medium quality output
        self.session.sessionPreset = AVCaptureSessionPresetMedium //AVCaptureSessionPresetHigh
        var error:NSError?
        //This step is to ask device where it can use back camera
        let input = AVCaptureDeviceInput(device: device, error: &error)
        if error != nil {
            println(error?.description)
            return
        }

        if session.canAddInput(input) {
            session.addInput(input)
        }

        layer = AVCaptureVideoPreviewLayer(session: session)
        layer?.videoGravity = AVLayerVideoGravityResizeAspectFill
        layer?.frame = CGRectMake(20, 150, 280, 280)
        self.view.layer.insertSublayer(self.layer!, atIndex: 0)

        let output = AVCaptureMetadataOutput()
        output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
        if session.canAddOutput(output) {
            session.addOutput(output)
            output.metadataObjectTypes = [AVMetadataObjectTypeQRCode]
        }

        session.startRunning()

    }

    func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
        var stringValue:String?
        if metadataObjects.count > 0 {
            var metadataObject = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
            stringValue = metadataObject.stringValue
        }

        self.session.stopRunning()
        let alertView = UIAlertView()
        alertView.message = stringValue
        alertView.addButtonWithTitle("Sure")
        alertView.delegate = self
        alertView.cancelButtonIndex = 0
        alertView.show()
    }

    func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
        session.startRunning()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

refer to :https://github.com/hitourlee/Swift_QRCode

时间: 2024-11-03 03:27:26

SWIFT Scan QRCode的相关文章

How To Scan QRCode For UWP (3)

这一节主要介绍如何去设置MediaCapture拍照的分辨率. MediaCapture 包含一个 VideoDeviceController对象,凭借它可以控制摄像头的很多设置,其中包括设置拍照的分辨率. 首先通过GetAvailableMediaStreamProperties方法来获取设备所支持的 Encoding Properties,要注意的是即使你指定了MediaStreamType为Photo,这个API会有可能同时返回 ImageEncodingProperties 跟 Vide

python库使用整理

1. 环境搭建 l  Python安装包:www.python.org l  Microsoft Visual C++ Compiler for Python l  pip(get-pip.py):pip.pypa.io/en/latest/installing.html n  pip install + 安装包          --安装包(.whl,.tar.gz,.zip) n  pip uninstall + 安装包        --卸载包 n  pip show --files +

AppCan移动应用开发平台新增9个超实用插件(内含示例代码)

使用AppCan平台进行移动开发,你所需要具备的是Html5+CSS +JS前端语言基础,此外,Hybrid混合模式应用还需结合原生语言对功能模块进行封装,对于没有原生基础的开发者,如何实现App里包括支付.界面布局.地图导航.IM等功能呢? 这里列出9个AppCan新插件,在使用AppCan平台进行移动开发时非常实用. 1. uexInAppPurchase iOS内部支付IAP插件:封装内部支付IAP相关操作. 方法说明: getProductList 得到产品列表方法 purchase 购

10月9日 Meteor Global Hackathon.

Meteor Global Hackathon 2015 Event Introduction Meteor Meetup groups from around the world will be participating in a global hackathon. Whether you're an experienced Meteor developer or just looking to get started, we hope you can join us. It will be

初涉扫码登录:edusoho实现客户端扫码登录(简版)

一.项目简介及需求 edusoho是一套商业版的在线教育平台,项目本身基于symfony2框架开发,现在有一款自己的APP,要求在不多修改edusoho自身代码的基础上,实现客户端对PC端扫码登录.不多修改edusoho代码的原因是为了避免下次升级主版本时发生错误. 二.版本信息及所需应用 edusoho 7.5.14 php 5.5.25 php  GD库 memcache(本次使用memcache作为存储介质,可用redis代替) 点我下载 phpqrcde(php生成二维码插件) 三.实现

swift版的枚举变量

swift的枚举类型跟普通的类是极为类似的,使用的时候,请不要以为他是一个常量,以下是测试用源码 // // ViewController.swift // SwiftEnum // // Created by YouXianMing on 15/10/9. // Copyright © 2015年 ZiPeiYi. All rights reserved. // import UIKit enum Planet: Int { case Mercury = 1, Venus, Earth, Ma

Swift语法快速索引

在WWDC的演示中就可以看出来Swift这个更接近于脚本的语言可以用更少的代码量完成和OC同样的功能.但是对于像我一样在战争中学习战争的同学们来说,天天抱着笨Swift Programming Language Reference之类的大部头看不实际.毕竟还是要养家糊口的.而且,那么1000+页内容讲的东西不是什么都要全部在平时工作中用到的.咱们就把平时用到的全部都放在一起,忘记了立马翻开看看,不知不觉的就学会了之后变成习惯.这样多省事. 变量 1 // Variable 2 var int_v

苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类

一. 枚举 枚举定义了一种包含一组相关值的公共类型.枚举是Swift中的一种与类类似的类型,具有许多传统类才有的特征,例如计算属性.实例方法,能够通过扩展或协议增强功能等. 1.1 枚举定义 Swift 语言的枚举类型的定义语法如下: enum CompassPoint { case North case South case East case West } 枚举语法以一个关键字enum来标识,enum后面包含一个枚举类型名字,枚举定义全部放到一对大括号中. 在枚举中定义的值称为枚举成员值,用

swift基础学习(04)[闭包、函数、枚举、类和结构体]

//闭包表达式:闭包表达式是一种利用简洁语法构建内联闭包的方式 //sort方法:排序功能,排序后的原来的不会被修改 //:从大到小排序 let names = ["d","ds","wa","ad"] func sortNames(sName1:String,sName2:String) -> Bool { return sName1 > sName2 } var result = names.sort(sort