二维码---扫描 swift

二维码---扫描 swift,第1张

概述swift 3.0 Xcode 8.1 需要在info.plist 添加 Privacy - Camera Usage Description YES import UIKitimport AVFoundation class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate { swift 3.0 Xcode 8.1 需要在info.pList 添加 Privacy - Camera Usage Description YES
import UIKitimport AVFoundation class VIEwController: UIVIEwController,AVCaptureMetadataOutputObjectsDelegate {       var session: AVCaptureSession!  //输入输出的中间桥梁       var myinput: AVCaptureDeviceinput!  //创建输入流    var myOutput: AVCaptureMetadataOutput!  //创建输出流       var bgVIEw = UIVIEw()    var barcodeVIEw = UIVIEw()       var timer = Timer()    var scanline = UIImageVIEw()       overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()               //设置定时器,延迟2秒启动        self.timer = Timer.scheduledTimer(timeInterval: 2,target: self,selector: #selector(moveScannerLayer(_:)),userInfo: nil,repeats: true)               //初始化链接对象        self.session = AVCaptureSession.init()        //设置高质量采集率        self.session.canSetSessionPreset(AVCaptureSessionPresetHigh)               //获取摄像设备        let device: AVCaptureDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVIDeo)               //捕捉异常,并处理        do {            self.myinput = try AVCaptureDeviceinput.init(device: device)            self.myOutput = AVCaptureMetadataOutput.init()            self.session.addinput(self.myinput)            self.session.addOutput(self.myOutput)        } catch {            print("error")        }               //创建预览视图        self.createBackGroundVIEw()               //设置扫描范围(横屏)        self.myOutput.rectOfInterest = CGRect(x: 0.35,y: 0.2,wIDth: UIScreen.main.bounds.wIDth * 0.6 / UIScreen.main.bounds.height,height: 0.6)              //设置扫码支持的编码格式(如下设置条形码和二维码兼容)        myOutput.MetadataObjectTypes = [AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeCode128Code]               //创建串行队列        let dispatchQueue = dispatchQueue(label: "queue",attributes: [])        //设置输出流的代理        self.myOutput.setMetadataObjectsDelegate(self,queue: dispatchQueue)               //创建预览图层        let myLayer = AVCaptureVIDeoPrevIEwLayer.init(session: self.session)        myLayer?.vIDeoGravity = AVLayerVIDeoGravityResizeAspectFill  //设置预览图层的填充方式        myLayer?.frame = self.vIEw.layer.bounds  //设置预览图层的frame        self.bgVIEw.layer.insertSublayer(myLayer!,at: 0)  //将预览图层(摄像头画面)插入到预览视图的最底部               //开始扫描        self.session.startRunning()        self.timer.fire()    }          //扫描结果,代理    func captureOutput(_ captureOutput: AVCaptureOutput!,dIDOutputMetadataObjects MetadataObjects: [Any]!,from connection: AVCaptureConnection!) {               if MetadataObjects != nil && MetadataObjects.count > 0 {                       //停止扫描            self.session.stopRunning()            timer.invalIDate()                       //获取第一个            let MetaData = MetadataObjects.first as! AVMetadataMachineReadableCodeObject            print(MetaData.stringValue)                       dispatchQueue.main.async(execute: {                //扫描到之后的 *** 作                //......                print(MetaData.stringValue)            })        }    }       //创建预览视图    func createBackGroundVIEw() {               self.bgVIEw.frame = UIScreen.main.bounds        self.bgVIEw.backgroundcolor = UIcolor.black        self.vIEw.addSubvIEw(self.bgVIEw)               //灰色蒙版        let topVIEw = UIVIEw(frame: CGRect(x: 0,y: 0,wIDth: UIScreen.main.bounds.size.wIDth,height: UIScreen.main.bounds.size.height * 0.35))               let leftVIEw = UIVIEw(frame: CGRect(x: 0,y: UIScreen.main.bounds.size.height * 0.35,wIDth: UIScreen.main.bounds.size.wIDth * 0.2,height: UIScreen.main.bounds.size.wIDth * 0.6))               let rightVIEw = UIVIEw(frame: CGRect(x: UIScreen.main.bounds.size.wIDth * 0.8,height: UIScreen.main.bounds.size.wIDth * 0.6))               let bottomVIEw = UIVIEw(frame: CGRect(x: 0,y: UIScreen.main.bounds.size.wIDth * 0.6 + UIScreen.main.bounds.size.height * 0.35,height: UIScreen.main.bounds.size.height * 0.65 - UIScreen.main.bounds.size.wIDth * 0.6))               topVIEw.backgroundcolor = UIcolor(red: 0,green: 0,blue: 0,Alpha: 0.4)        bottomVIEw.backgroundcolor = UIcolor(red: 0,Alpha: 0.4)        leftVIEw.backgroundcolor = UIcolor(red: 0,Alpha: 0.4)        rightVIEw.backgroundcolor = UIcolor(red: 0,Alpha: 0.4)               //文字说明        let label = UILabel(frame: CGRect(x: 0,y: 10,height: 21))        label.textAlignment = NSTextAlignment.center        label.Font = UIFont.systemFont(ofSize: 14)        label.textcolor = UIcolor.white        label.text = "将二维码/条形码放入扫描框内,即自动扫描"        bottomVIEw.addSubvIEw(label)               self.bgVIEw.addSubvIEw(topVIEw)        self.bgVIEw.addSubvIEw(bottomVIEw)        self.bgVIEw.addSubvIEw(leftVIEw)        self.bgVIEw.addSubvIEw(rightVIEw)                      //屏幕中间扫描区域视图(透明)        barcodeVIEw.frame = CGRect(x: UIScreen.main.bounds.size.wIDth * 0.2,wIDth: UIScreen.main.bounds.size.wIDth * 0.6,height: UIScreen.main.bounds.size.wIDth * 0.6)        barcodeVIEw.backgroundcolor = UIcolor.clear        barcodeVIEw.layer.borderWIDth = 1.0        barcodeVIEw.layer.bordercolor = UIcolor.white.cgcolor        self.bgVIEw.addSubvIEw(barcodeVIEw)               //扫描线        scanline.frame = CGRect(x: 0,wIDth: barcodeVIEw.frame.size.wIDth,height: 5)        scanline.image = UIImage(named: "QRCodeScanline")        barcodeVIEw.addSubvIEw(scanline)           }       //扫描线滚动    func moveScannerLayer(_ timer : Timer) {        self.scanline.frame = CGRect(x: 0,wIDth: self.barcodeVIEw.frame.size.wIDth,height: 12)               UIVIEw.animate(withDuration: 2) {            self.scanline.frame = CGRect(x: self.scanline.frame.origin.x,y: self.scanline.frame.origin.y + self.barcodeVIEw.frame.size.height - 10,wIDth: self.scanline.frame.size.wIDth,height: self.scanline.frame.size.height)        }           }     overrIDe func dIDReceiveMemoryWarning() {        super.dIDReceiveMemoryWarning()        // dispose of any resources that can be recreated.    }}
总结

以上是内存溢出为你收集整理的二维码---扫描 swift全部内容,希望文章能够帮你解决二维码---扫描 swift所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1069479.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存