我正在尝试在AVCaptureVideoPreviewLayer上添加叠加视图。这是我的视图层次结构 -
Preview Container (UIView)
AVCaptureVideoPreviewLayer
Overlay (UIView)
我在viewDidLoad()
中配置了AVCaptureVideoPreviewLayer,并将其viewDidLayoutSubviews()
中的帧更新为self.videoPreviewLayer.frame = self.previewContainer.bounds
,以便在渲染期间预览容器的边界发生更改时更新其帧。一切都很好。
叠加层视图也在viewDidLoad
中进行配置,如下所示:
let overlayView = UIView(frame: self.previewContainer.bounds)
overlayView.backgroundColor = UIColor.white.withAlphaComponent(0.7)
overlayView.autoresizingMask = [.flexibleHeight,.flexibleWidth]
self.previewContainer.addView(overlayView)
然而,叠加视图并未完全覆盖预览容器,但实际上更短。经过一些调试后,我发现在创建过程中,由于它的帧被设置为previewContainer的边界,因此它的高度较短,并且在viewDidLayoutSubviews()
之后重新绘制previewContainer的帧时不会更新。我似乎通过更新AVCaptureVideoPreviewLayer
中的帧来解决viewDidLayoutSubviews()
的这个确切问题(如上所示)。如何正确绘制overlayView?我在这里做错了什么?