iOS swift5 扫描二维码

这篇具有很好参考价值的文章主要介绍了iOS swift5 扫描二维码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.生成二维码图片

import UIKit
import CoreImage

func generateQRCode(from string: String) -> UIImage? {
     let data = string.data(using: String.Encoding.utf8)
    
    if let filter = CIFilter(name: "CIQRCodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 3, y: 3)
        
        if let output = filter.outputImage?.transformed(by: transform) {
            return UIImage(ciImage: output)
        }
    }
    
    return nil
}

class SendVC: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "旧机发送"
        view.backgroundColor = .white
        
        addImageView()
    }
    
    func addImageView() {
        let imageView = UIImageView()
        view.addSubview(imageView)
        imageView.snp.makeConstraints { make in
            make.center.equalToSuperview()
            make.width.height.equalTo(200)
        }
        
        imageView.image = generateQRCode(from: "123")
    }
}

2.扫描二维码(含上下扫描动画)

iOS swift5 扫描二维码,ios,swift,xcode文章来源地址https://www.toymoban.com/news/detail-676582.html

2.1 记得在info.plist中添加相机权限描述

  • 在使用下面的代码之前,确保你的 Info.plist 文件中已添加了相机权限描述(Camera Usage Description)。
<key>NSCameraUsageDescription</key>
<string>We need access to your camera for QR code scanning.</string>
import AVFoundation
import UIKit



class QRCodeScannerViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
    
    var captureSession: AVCaptureSession!
    var previewLayer: AVCaptureVideoPreviewLayer!
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 设置 AVCaptureSession
        captureSession = AVCaptureSession()
        
        guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else { return }
        let videoInput: AVCaptureDeviceInput
        
        do {
            videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
        } catch {
            return
        }
        
        if captureSession.canAddInput(videoInput) {
            captureSession.addInput(videoInput)
        } else {
            return
        }
        
        let metadataOutput = AVCaptureMetadataOutput()
        
        if captureSession.canAddOutput(metadataOutput) {
            captureSession.addOutput(metadataOutput)
            
            metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
            metadataOutput.metadataObjectTypes = [.qr]
        } else {
            return
        }
        
        // 设置预览图层
        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        previewLayer.frame = view.layer.bounds
        previewLayer.videoGravity = .resizeAspectFill
        view.layer.addSublayer(previewLayer)
        
        // 开始扫描
        captureSession.startRunning()
        
        addMaskToScannerView()
    }
    
    var scanningLine: UIView!
    func addMaskToScannerView() {
        // 计算正方形的位置,使其位于视图的正中心
        let squareSize: CGFloat = 300
        let squareX = (view.bounds.width - squareSize) / 2
        let squareY = (view.bounds.height - squareSize) / 2

        // 创建四个半透明的 UIView 元素作为遮罩
        let topMask = UIView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: squareY))
        let bottomMask = UIView(frame: CGRect(x: 0, y: squareY + squareSize, width: view.bounds.width, height: view.bounds.height - (squareY + squareSize)))
        let leftMask = UIView(frame: CGRect(x: 0, y: squareY, width: squareX, height: squareSize))
        let rightMask = UIView(frame: CGRect(x: squareX + squareSize, y: squareY, width: view.bounds.width - (squareX + squareSize), height: squareSize))

        // 设置遮罩的背景颜色
        [topMask, bottomMask, leftMask, rightMask].forEach {
            $0.backgroundColor = UIColor.black.withAlphaComponent(0.6)
            view.addSubview($0)
        }

        // 添加绿色的正方形框
        let squareFrame = UIView(frame: CGRect(x: squareX, y: squareY, width: squareSize, height: squareSize))
        squareFrame.layer.borderColor = UIColor.green.cgColor
        squareFrame.layer.borderWidth = 3
        squareFrame.backgroundColor = .clear
        view.addSubview(squareFrame)
        
        // 添加扫描线
        scanningLine = UIView(frame: CGRect(x: squareX, y: squareY, width: squareSize, height: 2))
        scanningLine.backgroundColor = UIColor.red
        view.addSubview(scanningLine)

        // 扫描线动画
        let animation = CABasicAnimation(keyPath: "position.y")
        animation.fromValue = squareY
        animation.toValue = squareY + squareSize
        animation.duration = 2
        animation.repeatCount = .infinity
        scanningLine.layer.add(animation, forKey: "scanning")
    }

    
    // 当扫描到 QRCode 时,此方法将被调用
    func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
        captureSession.stopRunning()
        
        if let metadataObject = metadataObjects.first {
            guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
            guard let stringValue = readableObject.stringValue else { return }
            
            AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
            found(code: stringValue)
        }
        
        dismiss(animated: true)
    }
    
    func found(code: String) {
        print("QRCode: \(code)")
        // 在此处处理扫描到的 QRCode
    }
    
    // 其他代码,如视图将要消失时停止扫描等
}

到了这里,关于iOS swift5 扫描二维码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Android】实现生成二维码、条形码和扫描二维码的功能

    目录 一、添加依赖 二、布局文件 三、实现生成二维码的功能 四、效果图 要先添加一个第三方库来实现二维码的生成以及扫描二维码的功能,开源库如下: 在build.grade(Moudle)中添加依赖: 效果如下: activity_main.xml: MainActivity.java: 简单粗暴! 感谢ლ(°◕‵ƹ′◕ლ)!!!

    2024年02月11日
    浏览(44)
  • iOS swift5 弹出提示文字(停留1~2s)XHToastSwift

    CoderZhuXH/XHToastSwift - github

    2024年02月10日
    浏览(29)
  • flutter扫描二维码,全套学习

    1.你所知道的设计模式有哪些? 参考回答 创建型模式,共五种 :工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种 :适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种 :策略模

    2024年03月28日
    浏览(29)
  • ios开发 swift5 苹果系统自带的图标 SF Symbols

    苹果官网网址:SF Symbols 通过上面的网址可以下载dmg, 安装到自己的mac上 貌似下面这样不能展示出动画,还是要使用动画的代码 UIKit swiftUI

    2024年02月11日
    浏览(39)
  • ios开发 swift5 苹果手机怎样获取蓝牙设备的mac地址

    如设备蓝牙名为: 蓝牙名_mac app这边展示蓝牙名的时候,就只展示 蓝牙名 , 去掉后面的 _mac 其他用到蓝牙名的地方,都用这样的方式处理 如下图,箭头部分就是广播出的mac地址 如果不是通过搜索获取到peripheral,而是通过retrievePeripherals方法获取到peripheral。这个时候就只能获

    2024年02月03日
    浏览(37)
  • vue页面动态生成二维码,扫描二维码跳转到微信小程序,同时传递参数

    最近领导提了个新的需求, 点击表格时,弹出一个二维码,微信扫描此二维码时,跳转到微信小程序,同时将所在行的id(即员工所在公司的id)传过去,这样员工在登录微信小程序时,根据此id就知道是哪个公司的员工登录或者注册 了! 刚开始想的是,直接把小程序的二维

    2024年02月11日
    浏览(45)
  • 【MAUI】条形码,二维码扫描功能

    本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。 移动端的扫描条形码、二维码的功能已经随处可见,已经很难找到一个不支持扫描的App了,但是微软的MAUI竟然没有提供,那么我们应该如何实现呢?

    2024年02月04日
    浏览(27)
  • 基于java服务端实现二维码扫描

    在Java中,可以使用第三方库来识别二维码内容。一个常用的库是ZXing(Zebra Crossing),它提供了强大的二维码处理功能。 首先,确保已将ZXing库添加到项目中。可以手动下载ZXing JAR文件,也可以使用构建工具(如Maven或Gradle)来管理依赖。 下面是使用ZXing库识别二维码内容的示

    2024年02月08日
    浏览(25)
  • 微信扫描普通二维码进入小程序

    微信扫描普通二维码进入小程序的方法,和代码没有什么关系,主要是在 小程序平台 进行设置 1. 开发配置 开发 —— 开发管理 —— 开发设置 —— 扫普通链接二维码打开小程序 2. 配置规则 根据说明配置内容就行,后面有说带参数的配置和怎么在小程序里面获取参数 带参数

    2024年02月11日
    浏览(44)
  • UNI-APP实现扫描二维码

    前言:在物联网的应用中,扫描功能是一种很常用的功能,这篇文章将教你怎么通过UNI-APP实现扫描二维码 找到扫码功能的API UNI-APP已经有了扫码功能的API了,通过API可以非常简单的实现扫码功能 UNI-APP官网 查看API 有API可以方便我们进行开发,所以,会看API也是程序员的必备

    2024年02月13日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包