条形码扫描出现问题。我正在尝试解码Florida DL pdf417,但是我的代码无法扫描,但是其他DL pdf417条形码正在通过我的代码进行扫描。我不知道发生了什么,或者我什么都没想到。请帮助我解决此问题,我的代码如下:
import UIKit
import AVFoundation
class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
var captureSession: AVCaptureSession!
var previewLayer: AVCaptureVideoPreviewLayer!
let metadataOutput = AVCaptureMetadataOutput()
var barcode_symbole = "PDF417"
var img = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
view.backgroundColor = UIColor.black
captureSession = AVCaptureSession()
guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else { return }
let videoInput: AVCaptureDeviceInput
do {
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
} catch {
return
}
captureSession.addInput(videoInput)
captureSession.addOutput(metadataOutput)
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = metadataOutput.availableMetadataObjectTypes
// metadataOutput.metadataObjectTypes = [.aztec]
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.frame = view.layer.bounds
previewLayer.videoGravity = .resizeAspectFill
view.layer.addSublayer(previewLayer)
captureSession.startRunning()
do {
try videoCaptureDevice.lockForConfiguration()
defer { videoCaptureDevice.unlockForConfiguration() }
videoCaptureDevice.videoZoomFactor = 1.0
videoCaptureDevice.isSmoothAutoFocusEnabled = true
videoCaptureDevice.focusMode = .locked
// videoCaptureDevice.videoZoomFactor = videoCaptureDevice.activeFormat.videoZoomFactorUpscaleThreshold
videoCaptureDevice.unlockForConfiguration()
} catch {
debugPrint(error)
}
}
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
output.metadataObjectTypes=output.availableMetadataObjectTypes
captureSession.stopRunning()
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
let metadataObject = metadataObjects.first
print(metadataObject?.type)
captureSession.startRunning()
guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
guard readableObject.stringValue != nil else { return }
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
print(readableObject.stringValue as Any)
let licenseData = readableObject.stringValue!.components(separatedBy: "@")
print(licenseData)
DispatchQueue.main.async {
let alert = UIAlertController(title: "Alert", message: licenseData.description, preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertAction.Style.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
captureSession.startRunning()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if (captureSession?.isRunning == false) {
captureSession.startRunning()
}
}
}