SWIFT Scan QRCode

简介: SWIFT中扫描QRCode代码如下,照着敲一次再看下API的注释应该就没问题了。 import UIKit import Foundation import AVFoundation class ViewController: UIViewController,AVCaptureM...

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

目录
相关文章
|
小程序 网络安全 Windows
swoole(二)ws与wss的区别
关于ws与wss的区别这里简单的说一下我目前的见解。 如果你有更多的见解欢迎在下方留言讨论。 最简单的理解就是: 服务器上服务端用的是:websocket协议(支持客户端的ws访问) 服务器上服务端用的是:websocket协议+TLS(支持客户端的wss访问) 客户端上用的是: ws协议或者wss协议 Wss与ws其实就和http与https的关系,wss需要验证域名证书,ws不需要验证域名证书。 这个其实都不重要。我们在开发的时候关系不是很大。 下边的才是我要说的重点: Ws链接可以使用IP+端口号的形式访问。 Wss链接只能使用域名的形式访问,因为服务器端需要通过域名来找对应的ssl证书
951 0
系列文章深度解读|SwiftUI 背后那些事儿
前言 今年苹果的WWDC你看了吗?苹果在2019年的WWDC的重头戏当然非SwiftUI莫属:全新的声明式语法、绑定式API、和响应式变成框架Combine。这一切的一切都预示着即将在Apple Native布局系统掀起一场革命。
17867 0
|
存储 安全 C语言
free函数的用法和注意事项
free函数的用法和注意事项
402 0
|
SQL Java 数据库连接
|
测试技术 开发工具 芯片
Open Chip Community (OCC)
Open Chip Community (OCC) 是一个开源芯片社区,旨在推动开源芯片的发展和普及。OCC 的目标是为开发人员提供一个开放透明的平台,让他们可以共同协作、创新和分享开源芯片技术。
854 3
|
Unix Linux 异构计算
成功解决 ERROR: An error occurred while performing the step: “Building kernel modules“. See /var/log/nv
成功解决 ERROR: An error occurred while performing the step: “Building kernel modules“. See /var/log/nv
成功解决 ERROR: An error occurred while performing the step: “Building kernel modules“. See  /var/log/nv
|
Java 设计模式 SQL
老系统重构系列--上线十年,81万行Java代码的老系统如何重构
本文借着版权管理系统-付款的改造,总结和抽象了一些老系统改造的方法。希望能对遇到类似问题的同学有所帮助。
8885 4
老系统重构系列--上线十年,81万行Java代码的老系统如何重构
|
Shell Linux Windows
Linux shell 执行报错 字符编码转换 iconv/dos2unix 将 gbk/gb2312 转utf8 解决方案
功能: 1. 解决字符转换,字符乱码。2.解决执行报错 ^M 。 sudo dos2unix $file # 非常重要:解决 windows 和 ubuntu下的 ^M 字符错误, shell 执行报错 ^M ; 这个符号是 windows 的换行符号
529 0
|
设计模式 消息中间件 存储
一起来学设计模式之享元模式
前言 目前正在出一个设计模式专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本节给大家讲一下设计模式中的享元模式,并结合实际业务场景给大家讲解如何使用~ 本专题的所有案例代码主要以Java语言为主, 好了, 废话不多说直接开整吧~ 享元模式 享元模式是一种结构型设计模式,其主要目的是通过共享尽可能多的对象来减少内存使用和对象创建的数量。其核心思想是尽可能地共享对象,以减少内存的使用。
|
安全
SwiftUI—如何使视图充满整个屏幕
SwiftUI—如何使视图充满整个屏幕
969 0
SwiftUI—如何使视图充满整个屏幕

热门文章

最新文章