Как разместить прямоугольник поверх AVCaptureVideoPreviewLayer - SWIFT - PullRequest
0 голосов
/ 15 мая 2018

У меня есть AVCaptureVideoPreviewLayer и я хотел бы иметь возможность поместить слой прямоугольника поверх него.У меня есть триггер, который хочет рисовать прямоугольники в верхней части этого предварительного просмотра.До сих пор моя попытка была ниже, но я не знаю, как продолжить.

 var previewLayer = AVCaptureVideoPreviewLayer.init()
 var previewFrame = CGRect.init()

 override func viewDidLoad() {
    super.viewDidLoad()

    // Setting Up a Capture Session
    let captureSession = AVCaptureSession()
    captureSession.beginConfiguration()


    // Configure input
    let videoDevice = AVCaptureDevice.default(for: .video)

    guard
        let videoDeviceInput = try? AVCaptureDeviceInput.init(device: videoDevice!) as AVCaptureInput,
        captureSession.canAddInput(videoDeviceInput)else {return}

    captureSession.addInput(videoDeviceInput)


    // Capture video output
    let videoOutput = AVCaptureVideoDataOutput.init()
    guard captureSession.canAddOutput(videoOutput) else {return}
    videoOutput.setSampleBufferDelegate(self, queue: DispatchQueue.init(label: "videoQueue"))
    captureSession.addOutput(videoOutput)


    // start
    captureSession.commitConfiguration()
    captureSession.startRunning()


    // Display camera preview
    let previewLayer = AVCaptureVideoPreviewLayer.init(session: captureSession)
    view.layer.addSublayer(previewLayer)
    previewLayer.frame = view.frame
    previewFrame = previewLayer.frame

}

Мой триггер хотел бы нарисовать прямоугольник поверх AVCaptureVideoPreviewLayer:

 let rectangle = UIBezierPath.init()
 rectangle.move(to: CGPoint.init(x: value1, y: value2))
 rectangle.addLine(to: CGPoint.init(x: value3, y: value4))
 rectangle.addLine(to: CGPoint.init(x: value5, y: value6))
 rectangle.addLine(to: CGPoint.init(x: value7, y: value8))

 rectangle.close()
 let rec = CAShapeLayer.init()
 rec.path = rectangle.cgPath
 rec.fillColor = UIColor.orange.cgColor

 rec.frame = self.previewFrame
 self.previewLayer.addSublayer(rec) // Does not work
...