Сканирование QR-кода и размещение SCNNode - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь отсканировать QR-код и затем представить результаты в UIWebView.Я не могу сделать два процесса (отмечено ниже);отображение и QR-код.

Как я могу это сделать

import UIKit
import SceneKit
import ARKit
import AVFoundation
import SafariServices

class ViewController: UIViewController, ARSCNViewDelegate, AVCaptureMetadataOutputObjectsDelegate {

    @IBOutlet weak var backview: UIView!

    @IBOutlet weak var sceneView: ARSCNView!

    var planeGeometry:SCNPlane!
    var anchors = [ARAnchor]()
    var sceneLight:SCNLight!

    var video = AVCaptureVideoPreviewLayer()

    override func viewDidLoad() {
        super.viewDidLoad()

        let sessiont = AVCaptureSession()
        let captureDevice = AVCaptureDevice.default(for: AVMediaType.video)

        do {
            let input = try AVCaptureDeviceInput(device: captureDevice!)
            sessiont.addInput(input)
        } catch {
            print("error")
        }

        let output = AVCaptureMetadataOutput()
        sessiont.addOutput(output)

        output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
        output.metadataObjectTypes = [AVMetadataObject.ObjectType.qr]
        video = AVCaptureVideoPreviewLayer(session: sessiont)
        video.frame = view.layer.frame
        backview.layer.addSublayer(video)
        backview.isHidden = true

        sessiont.startRunning() //HERE!!!

    }

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(true)

        let configuration = ARWorldTrackingConfiguration()
        configuration.planeDetection = .horizontal
        configuration.isLightEstimationEnabled = true


        // Run the view's session
       sceneView.session.run(configuration) //HERE!!
    }

    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 {
                    //Pass to AR
                }
            }
        }
    }
}

Я не включил код создания AR, но я не думаю, что это необходимо.Мне нужно по-разному сканировать QR-код, чтобы они оба могли работать одновременно.Я попытался встроить QR-код в другой UIView, но безрезультатно.

Любая помощь очень ценится!

Найл

...