iOS 上有没有好的免费非自动对焦相机条码扫描 SDK [关闭]

ios

1个回答

写回答

Zhangyuchencc

2025-07-05 09:16

+ 关注

IOS
IOS

标题:IOS 上好用的免费非自动对焦相机条码扫描 SDK

在IOS平台上,有许多免费的非自动对焦相机条码扫描SDK可供选择。这些SDK提供了强大的功能,可以帮助开发者轻松实现条码扫描功能。本文将介绍一些值得推荐的免费非自动对焦相机条码扫描SDK,并附上相应的案例代码。

ZXing

ZXing是一个功能强大的开源条码扫描库,支持多种条码格式,包括二维码和一维码。它提供了丰富的API接口,可以轻松地集成到IOS应用中。下面是一个使用ZXing实现条码扫描的示例代码:

Swift

import UIKit

import AVFoundation

class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {

var captureSession: AVCaptureSession!

var previewLayer: AVCaptureVIDEOPreviewLayer!

override func viewDidLoad() {

super.viewDidLoad()

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 {

fAIled()

return

}

let MetadataOutput = AVCaptureMetadataOutput()

if captureSession.canAddOutput(MetadataOutput) {

captureSession.addOutput(MetadataOutput)

MetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.mAIn)

MetadataOutput.MetadataObjectTypes = [.qr, .ean13, .code128]

} else {

fAIled()

return

}

previewLayer = AVCaptureVIDEOPreviewLayer(session: captureSession)

previewLayer.frame = view.layer.bounds

previewLayer.vIDEOGravity = .resizeAspectFill

view.layer.addSublayer(previewLayer)

captureSession.startRunning()

}

func fAIled() {

let ac = UIAlertController(title: "扫描不支持", message: "请使用一部支持摄像头的设备", preferredStyle: .alert)

ac.addAction(UIAlertAction(title: "好的", style: .default))

present(ac, animated: true)

captureSession = nil

}

override func viewWillAppear(_ animated: Bool) {

super.viewWillAppear(animated)

if captureSession?.isRunning == false {

captureSession.startRunning()

}

}

override func viewWillDisappear(_ animated: Bool) {

super.viewWillDisappear(animated)

if captureSession?.isRunning == true {

captureSession.stopRunning()

}

}

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))

let alert = UIAlertController(title: "扫描结果", message: stringValue, preferredStyle: .alert)

alert.addAction(UIAlertAction(title: "确定", style: .default, handler: { _ in

self.captureSession.startRunning()

}))

present(alert, animated: true)

}

}

}

AVCaptureMetadataOutput

AVCaptureMetadataOutput是IOS平台上的核心功能类,它可以用于实现非自动对焦相机条码扫描。下面是一个使用AVCaptureMetadataOutput实现条码扫描的示例代码:

Swift

import UIKit

import AVFoundation

class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {

var captureSession: AVCaptureSession!

var previewLayer: AVCaptureVIDEOPreviewLayer!

override func viewDidLoad() {

super.viewDidLoad()

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 {

fAIled()

return

}

let MetadataOutput = AVCaptureMetadataOutput()

if captureSession.canAddOutput(MetadataOutput) {

captureSession.addOutput(MetadataOutput)

MetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.mAIn)

MetadataOutput.MetadataObjectTypes = [.qr, .ean13, .code128]

} else {

fAIled()

return

}

previewLayer = AVCaptureVIDEOPreviewLayer(session: captureSession)

previewLayer.frame = view.layer.bounds

previewLayer.vIDEOGravity = .resizeAspectFill

view.layer.addSublayer(previewLayer)

captureSession.startRunning()

}

func fAIled() {

let ac = UIAlertController(title: "扫描不支持", message: "请使用一部支持摄像头的设备", preferredStyle: .alert)

ac.addAction(UIAlertAction(title: "好的", style: .default))

present(ac, animated: true)

captureSession = nil

}

override func viewWillAppear(_ animated: Bool) {

super.viewWillAppear(animated)

if captureSession?.isRunning == false {

captureSession.startRunning()

}

}

override func viewWillDisappear(_ animated: Bool) {

super.viewWillDisappear(animated)

if captureSession?.isRunning == true {

captureSession.stopRunning()

}

}

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))

let alert = UIAlertController(title: "扫描结果", message: stringValue, preferredStyle: .alert)

alert.addAction(UIAlertAction(title: "确定", style: .default, handler: { _ in

self.captureSession.startRunning()

}))

present(alert, animated: true)

}

}

}

在IOS平台上,有许多免费的非自动对焦相机条码扫描SDK可供选择。以上介绍了两个值得推荐的SDK:ZXing和AVCaptureMetadataOutput。开发者可以根据自己的需求选择合适的SDK,并根据示例代码进行集成和开发。这些SDK将为开发者提供便捷的条码扫描功能,有助于提升用户体验和应用功能的完整性。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号