使用 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
我认为应该解决它。如果您旋转设备,您可能需要更新视图控制器 viewWillLayoutSubviews
中 previewLayer
的 size
。
您需要设置视图的内容模式:
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
我正在尝试学习 AVFoundation 基础知识。现在我正在尝试制作最简单的自定义相机演示。一般的方案是使用UIView
作为AVCaptureVideoPreviewLayer
所以我通过以下方式创建了一个previewLayer:
let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
作为后续我这样做:
previewLayer?.frame = self.imageView.bounds
self.imageView.layer.addSublayer(previewLayer)
captureSession.startRunning()
基本上就是这样。因此,captureSession 正在 运行,但视觉上的相机预览在 UIView
中错位了。请看下图
但是,我几乎可以肯定我在情节提要中所做的一切都是正确的:
所以问题是造成这种 UI 行为的原因可能是什么?
提前致谢。
首先,假设您使用的是自动布局,请确保您的约束对于故事板中的视图是正确的。如果您不使用自动版式,我建议您在继续之前先这样做。
将 AVCaptureVideoPreviewLayer
添加到 imageView
后,您需要为它设置框架。
previewLayer.frame = self.imageView.layer.bounds
我认为应该解决它。如果您旋转设备,您可能需要更新视图控制器 viewWillLayoutSubviews
中 previewLayer
的 size
。
您需要设置视图的内容模式:
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;