使用 AVCaptureVideoPreviewLayer 时的布局问题

Layout issue when using AVCaptureVideoPreviewLayer

我正在尝试学习 AVFoundation 基础知识。现在我正在尝试制作最简单的自定义相机演示。一般的方案是使用UIView作为AVCaptureVideoPreviewLayer

的容器

所以我通过以下方式创建了一个previewLayer:

let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)

作为后续我这样做:

previewLayer?.frame = self.imageView.bounds        
self.imageView.layer.addSublayer(previewLayer)
captureSession.startRunning()

基本上就是这样。因此,captureSession 正在 运行,但视觉上的相机预览在 UIView 中错位了。请看下图

但是,我几乎可以肯定我在情节提要中所做的一切都是正确的: 抱歉,我不知道要添加什么,因为我是 swift 的新手。如果我遗漏了任何需要回答的信息,请告诉我。

所以问题是造成这种 UI 行为的原因可能是什么?

提前致谢。

首先,假设您使用的是自动布局,请确保您的约束对于故事板中的视图是正确的。如果您不使用自动版式,我建议您在继续之前先这样做。

AVCaptureVideoPreviewLayer 添加到 imageView 后,您需要为它设置框架。

previewLayer.frame = self.imageView.layer.bounds

我认为应该解决它。如果您旋转设备,您可能需要更新视图控制器 viewWillLayoutSubviewspreviewLayersize

您需要设置视图的内容模式:

previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;