
IOS
标题:IOS 上好用的免费非自动对焦相机条码扫描 SDK
在IOS平台上,有许多免费的非自动对焦相机条码扫描SDK可供选择。这些SDK提供了强大的功能,可以帮助开发者轻松实现条码扫描功能。本文将介绍一些值得推荐的免费非自动对焦相机条码扫描SDK,并附上相应的案例代码。ZXingZXing是一个功能强大的开源条码扫描库,支持多种条码格式,包括二维码和一维码。它提供了丰富的API接口,可以轻松地集成到IOS应用中。下面是一个使用ZXing实现条码扫描的示例代码:Swiftimport UIKitimport AVFoundationclass 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) } }}AVCaptureMetadataOutputAVCaptureMetadataOutput是IOS平台上的核心功能类,它可以用于实现非自动对焦相机条码扫描。下面是一个使用AVCaptureMetadataOutput实现条码扫描的示例代码:Swiftimport UIKitimport AVFoundationclass 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将为开发者提供便捷的条码扫描功能,有助于提升用户体验和应用功能的完整性。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号