【问题标题】:Layout issue when using AVCaptureVideoPreviewLayer使用 AVCaptureVideoPreviewLayer 时的布局问题
【发布时间】:2016-04-24 18:42:30
【问题描述】:

我正在尝试学习 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 行为的原因可能是什么?

提前致谢。

【问题讨论】:

    标签: swift user-interface avfoundation


    【解决方案1】:

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

    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

    【讨论】:

      【解决方案2】:

      首先,假设您使用的是自动布局,请确保您的约束对于情节提要中的视图是正确的。如果您没有使用 Autolayout,我建议您在继续之前先这样做。

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

      previewLayer.frame = self.imageView.layer.bounds
      

      我认为应该处理它。如果您旋转您的设备,您可能需要在视图控制器的viewWillLayoutSubviews 中更新previewLayersize

      【讨论】:

      • 嗨。感谢您的回复。添加预览图层后,我按照您的建议使用了分配 layer.bounds。那没起效。是的,我确实使用自动布局。如果您有任何其他想法,我将很高兴知道。谢谢
      • 确保您的imageView 定位正确。您可以设置断点并以这种方式检查它。您也可以检查previewLayer 框架。你也可以使用 Xcode 的 Debug/View Debugging。
      • 好的,会调查的。如果其中任何一项有效,我会接受您的回答。谢谢
      猜你喜欢
      • 1970-01-01
      • 2011-07-04
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多