Как закрыть сканер кода Qr после успешного сканирования - Swift 4 - PullRequest
0 голосов
/ 29 апреля 2018

Я включил сканер QR-кодов, и он отлично работает, но проблема не может закрыть камеру после успешного сканирования. Здесь, в моем коде, я хочу закрыть камеру, если я нажму кнопку подтверждения ... Пожалуйста, помогите мне Спасибо !!

@objc func scanButtonTapped(sender: UIButton) {
let session = AVCaptureSession()
    let captureDevice = AVCaptureDevice.default(for: .video)
    do {
        let input = try AVCaptureDeviceInput(device: captureDevice!)
        session.addInput(input)
    } catch {
        self.view.makeToast("Sorry Scanner is not working!")
    }

    let output = AVCaptureMetadataOutput()
    session.addOutput(output)
    output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
    output.metadataObjectTypes = [AVMetadataObject.ObjectType.qr]
    video = AVCaptureVideoPreviewLayer(session: session)
    video.frame = view.layer.bounds
    view.layer.addSublayer(video)
    session.startRunning()
}

func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
    if metadataObjects != nil && metadataObjects.count != 0 {
        if let object = metadataObjects[0] as? AVMetadataMachineReadableCodeObject {
            if object.type == AVMetadataObject.ObjectType.qr {

                let alert = UIAlertController(title: "QR Code", message: object.stringValue, preferredStyle: .alert)
                alert.addAction(UIAlertAction(title:"Retake", style: .default, handler: nil))
                alert.addAction(UIAlertAction(title:"Confirm", style: .default, handler: { (nil) in
                    self.scannedCode = object.stringValue!
                }))
                present(alert, animated: true, completion: nil)
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Замените Подтверждение действия приведенным ниже кодом:

alert.addAction(UIAlertAction(title:"Confirm", style: .default, handler: { (nil) in
                    self.scannedCode = object.stringValue!
                    self.session.stopRunning()
                }
0 голосов
/ 29 апреля 2018

Во-первых, вам нужно сохранить объект сеанса как переменную экземпляра в вашем контроллере. Например,

var session: AVCaptureSession?

Затем создайте экземпляр вашей сессии, когда вам нужно использовать камеру

self.session = AVCaptureSession()

Тогда вы можете ссылаться из вашего метода metadataOutput.

self.session.stopRunning()
...