QRCode Swift 5 - Нет доступа к камере - PullRequest
0 голосов
/ 27 марта 2020

Я здесь довольно нов, я продублировал код, с которым работал, чтобы создать простой вариант QRScan. Каждый раз, когда я запускаю свое приложение, это "fun c" активируется. хотя я согласился предоставить доступ к своей камере.

Кто-нибудь знает, что это может быть?

fun c failed () {let a c = UIAlertController ( title: «Сканирование не поддерживается», сообщение: «Ваше устройство не поддерживает сканирование кода из элемента. Используйте устройство с камерой», предпочитаемый стиль: .alert) присутствует (a c, animated: true)

import UIKit
import AVFoundation
import AudioToolbox.AudioServices

class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {

    @IBOutlet weak var topBarView: UIView!
    @IBOutlet weak var messageLabel: UILabel!

        var captureSession: AVCaptureSession?
        var videoPreviewLayer: AVCaptureVideoPreviewLayer?
        var qrCodeFrameView: UIView?

        private let supportCodeTypes = [AVMetadataObject.ObjectType.qr]

        override func viewDidLoad() {
            super.viewDidLoad()

            guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else { return }
                let videoInput: AVCaptureDeviceInput


                do {
                    videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
                } catch {
                    return
            }

            if ((captureSession?.canAddInput(videoInput)) != nil) {
                captureSession?.canAddInput(videoInput)
            } else {
                failed()

                return
            }

            // let captureMetadataOutput = AVCaptureMetadataOutput()
            let metadataOutput = AVCaptureMetadataOutput()

            if (captureSession?.canAddOutput(metadataOutput))! {
                captureSession?.addOutput(metadataOutput)

                // check status of camera permissions
                metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
                metadataOutput.metadataObjectTypes = [AVMetadataObject.ObjectType.qr]
                    metadataOutput.metadataObjectTypes = [.qr]
                } else {
                    failed()

                return
            }

            videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession!)
            videoPreviewLayer!.frame = view.layer.bounds
            videoPreviewLayer?.videoGravity = .resizeAspectFill
            view.layer.addSublayer(videoPreviewLayer!)

            captureSession?.startRunning()
    }

    func failed() {
        let ac = UIAlertController(title: "Scanning not supoorted", message: "Your device does         not support scanning a code from an item. Please use a device with a camera", preferredStyle: .alert)
                     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) {
        if captureSession?.isRunning == true {
            captureSession?.stopRunning()
        }

        super.viewWillAppear(animated)
    }

    func metadataOutput(_ captureOutput: AVCaptureOutput, didOutputMetadataObjects metadataobjects: [Any]!, 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 }
            AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
            found(code: stringValue)
        }

        dismiss(animated: true)
    }

    func found(code: String) {
        print(code)
    }

    override var prefersStatusBarHidden: Bool {
        return true
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .portrait
    }
}
...