iOS之Swift实现二维码扫描

这篇博客介绍了如何在iOS中使用Swift实现二维码扫描功能,包括扫码和识别相册中的二维码图片。作者分享了自己的Swift开发体验,并提供了相关代码和效果图。
摘要由CSDN通过智能技术生成

iOS之Swift实现二维码扫描

开始的一些话

作为一个“半路出家”的iOS的程序猿,一直使用OC开发,也想过使用Swift,但一直没有时间和机会;但最近做了一个新的项目,为我提供了机会,整个App大部分使用了Swift进行编写。体会就是Swift是真的很简练,入门也比较容易。
现在开发基本完成,于是准备把这次开发中用到的一些知识总结出来,写的不好,还请见谅!

第一个是Swift实现的二维码扫描,支持扫码和自动识别相册中的二维码图片,内容没有太多废话,直接上效果图和源码。

效果图

在这里插入图片描述

源码

import UIKit
import AVKit

protocol QRScanDelegate {
   
    func handleQRScanResult(result: String);
}

class QRScanViewController: UIViewController {
   
    
    var delegate: QRScanDelegate?
    
    var lampBtn: UIButton!
    var lampImgView: UIImageView!
    var lampTitleLab: UILabel!
    var albumBtn: UIButton!
    
    var captureDevice: AVCaptureDevice?
    var captureInput: AVCaptureDeviceInput?
    var mataOutput: AVCaptureMetadataOutput?
    var captureSession: AVCaptureSession?
    var capturePreView: AVCaptureVideoPreviewLayer?
    
    var scanView: UIImageView?
    var torchTag = false
    
    lazy var interestRect: CGRect = {
   
        let kPadding: CGFloat = 60
        let rectLength = kScreenWidth - kPadding * 2
        let rect = CGRect.init(x: kPadding,
                               y: (kScreenHeight - rectLength) / 2 - 60,
                               width: rectLength,
                               height: rectLength)
        return rect
    }()

    override func viewDidLoad() {
   
        super.viewDidLoad()
        
        setupCoverView()
        setupInterestRectBoard()
        setupScanLine()
        setupTopView()
        setupBottomView()
    }
    
    override func viewWillAppear(_ animated: Bool) {
   
        super.viewWillAppear(animated)
        
        setupCaptureSession()
        startScan()

    }
    
    override func viewWillDisappear(_ animated: Bool) {
   
        super.viewWillDisappear(animated)
        if torchTag {
   
            try? captureDevice?.lockForConfiguration()
            captureDevice?.torchMode = .off
            captureDevice?.unlockForConfiguration()
            torchTag = false
        }
    }
    
    // MARK: - 开始扫描
    func startScan() {
   
        scanView?.isHidden = false
        let animation = CABasicAnimation.init(keyPath: "transform.translation.y")
        animation.fromValue = 0
        animation.toValue = self.interestRect.size.height
        animation.timingFunction = CAMediaTimingFunction.init(name: CAMediaTimingFunctionName.easeInEaseOut)
        animation.duration = 3
        animation.isRemovedOnCompletion = false
        animation.repeatCount = MAXFLOAT
        scanView?.layer.add(animation, forKey: "y_transaltion")
        if ((captureSession?.isRunning)!) {
   
            return
        }
        captureSession?.startRunning()
    }
    
    // MARK: - 停止扫描
    func endScan() {
   
        if (!(captureSession?.isRunning)!) {
   
            return
        }
        captureSession?.stopRunning()
        scanView?.isHidden = true
        scanView?.layer.removeAnimation(forKey: "y_transaltion")
    }
    
    func setupScanLine() {
   
        scanView = UIImageView.init(frame: CGRect(x: self.interestRect.origin.x+1,
                                                  y: self.interestRect.origin.y+1,
                                                  width: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二流人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值