使用AVCaptureVideoPreviewLayer时的布局问题

时间:2016-04-24 18:42:30

标签: swift user-interface avfoundation

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

的容器

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

let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)

作为以下我这样做:

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

基本上就是这样。因此,captureSession正在运行,但在UIView内可视化相机预览错位。请看下面的图片 Misplaced camera preview

但是,我几乎可以肯定我在故事板中做了一切: Storyboard 对不起,我不知道要添加什么,因为我在swift中比较新。如果我错过了回答所需的任何信息,请告诉我。

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

答案 1 :(得分:0)

首先,假设您使用的是Autolayout,请确保您的约束对于故事板中的视图是正确的。如果你不使用Autolayout,我会建议你先行。然后再继续。

AVCaptureVideoPreviewLayer添加到imageView后,您需要为previewLayer.frame = self.imageView.layer.bounds 设置框架。

size

我认为应该照顾它。如果您轮播设备,则可能需要更新视图控制器previewLayerviewWillLayoutSubviews的{​​{1}}。