Штрих-код Swift4 (ean13) не работает - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь заставить программу читать EAN13 из приведенного ниже кода, но она не работает

func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {


    if metadataObjects != nil && metadataObjects.count != 0 {
        if let object = metadataObjects[0] as? AVMetadataMachineReadableCodeObject {
            print(object.type)
            if object.type == AVMetadataObject.ObjectType.ean13{
                let alert = UIAlertController(title: "Your code is:", message: object.stringValue, preferredStyle: .alert)
                alert.addAction(UIAlertAction(title: "Retake", style: .default, handler: nil))
                alert.addAction(UIAlertAction(title: "Copy", style: .default, handler: { (nil) in
                    UIPasteboard.general.string = object.stringValue
                }))
                present(alert, animated: true, completion: nil)
            }
        }
    }

, но для QR-кода AVMetadataObject.ObjectType.QR работает нормально.

Я пытался с enter image description here

1 Ответ

0 голосов
/ 05 июня 2018

Мне удалось прочитать тот штрих-код, который вы использовали, используя этот пример:

    var captureSession: AVCaptureSession!
    var previewLayer: AVCaptureVideoPreviewLayer!

 @IBAction func scanBarCode(_ sender: UIButton){
    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, .aztec,.code128, .code39, .code39Mod43, .code93, .dataMatrix, .ean13,.ean8]
    } else {
        failed()
        return
    }

    previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
    previewLayer.frame = view.layer.bounds
    previewLayer.videoGravity = .resizeAspectFill
    view.layer.addSublayer(previewLayer)

    captureSession.startRunning()
}

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

    if !code.isEmpty{
        scannerResultLabel.text = code
    }
    if let previewLayer = previewLayer{
        previewLayer.removeFromSuperlayer()
    }
}
...