У меня есть 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