Swift 使用AVCaptureVideoPreviewLayer时的布局问题
我正在努力学习基础知识。现在,我正试图使最简单的定制相机演示成为可能。一般方案是使用Swift 使用AVCaptureVideoPreviewLayer时的布局问题,swift,user-interface,avfoundation,Swift,User Interface,Avfoundation,我正在努力学习基础知识。现在,我正试图使最简单的定制相机演示成为可能。一般方案是使用UIView作为AVCaptureVideoPreviewLayer 因此,我通过以下方式创建预览层: let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 以下是我的做法: previewLayer?.frame = self.imageView.bounds self.imageView.layer.ad
UIView
作为AVCaptureVideoPreviewLayer
因此,我通过以下方式创建预览层:
let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
以下是我的做法:
previewLayer?.frame = self.imageView.bounds
self.imageView.layer.addSublayer(previewLayer)
captureSession.startRunning()
基本上就是这样。因此,captureSession正在运行,但摄像头预览在UIView
中放错了位置。请看下面的图片
然而,我几乎可以肯定我在故事板中做的每件事都是正确的:
很抱歉,我不知道要补充什么,因为我在swift方面相对较新。如果我遗漏了回答问题所需的任何信息,请告诉我
所以问题是,这种UI行为的原因可能是什么
提前感谢。首先,假设您使用的是Autolayout,请确保您的约束对于故事板中的视图是正确的。如果您没有使用Autolayout,我建议您在继续之前先使用Autolayout 将
AVCaptureVideoPreviewLayer添加到imageView
后,需要为其设置帧
previewLayer.frame = self.imageView.layer.bounds
我认为这应该解决它。如果旋转设备,可能需要更新视图控制器的视图中预览层
的大小
,将布局子视图
,首先,假设您使用的是自动布局,请确保您的约束对于情节提要中的视图是正确的。如果您没有使用Autolayout,我建议您在继续之前先使用Autolayout
将AVCaptureVideoPreviewLayer添加到imageView
后,需要为其设置帧
previewLayer.frame = self.imageView.layer.bounds
我认为这应该解决它。如果旋转设备,可能需要在视图控制器的视图willlayoutsubviews
中更新预览层的大小
,您需要设置视图的内容模式:
previewLayer.videoGravity=AVLayerVideoGravityResizeAspectFill代码>您需要设置视图的内容模式:
previewLayer.videoGravity=AVLayerVideoGravityResizeAspectFill代码>您好。谢谢你的回复。添加预览层后,我按照您的建议使用assign layer.bounds。它不起作用。是的,我确实使用自动布局。我很高兴知道你是否还有其他想法。感谢确保您的imageView
位置正确。您可以设置断点并以这种方式进行检查。您还可以检查previewLayer
框架。您还可以使用Xcode的Debug/View Debug.OK,我们将对此进行研究。如果其中任何一个有效,我将接受你的回答。谢谢。谢谢你的回复。添加预览层后,我按照您的建议使用assign layer.bounds。它不起作用。是的,我确实使用自动布局。我很高兴知道你是否还有其他想法。感谢确保您的imageView
位置正确。您可以设置断点并以这种方式进行检查。您还可以检查previewLayer
框架。您还可以使用Xcode的Debug/View Debug.OK,我们将对此进行研究。如果其中任何一个有效,我将接受你的回答。谢谢