AVPreviewLayer contentsGravity不填充图层

时间:2015-12-04 00:11:01

标签: ios swift avfoundation

enter image description here

我正在使用AVFoundation进行视频录制,而且我已经全神贯过地看了如何让视频进行纵横填充。我通过苹果和课堂参考AVCaptureVideoPreviewLayer阅读了avfoundation指南。我也在这里阅读了这个问题AVFoundation camera preview layer not working。这是我的代码

        videoPreviewLayer.frame = captureView.frame
        videoPreviewLayer.frame.origin = CGPoint(x: 0, y: 0)
        videoPreviewLayer.backgroundColor = UIColor.redColor().CGColor
        videoPreviewLayer.contentsGravity = AVLayerVideoGravityResizeAspectFill
        videoPreviewLayer.masksToBounds = true
        captureView.layer.addSublayer(videoPreviewLayer)

我把它放在viewDidLayoutSubviews()中,这样我就可以获得captureView.frame的正确大小,这是我的previewLayer所在的UIView。任何关于为什么aspectFill不起作用的线索?正如您从红色背景中看到的那样,图层的大小正确,但内容重力不足以填充图层。

2 个答案:

答案 0 :(得分:4)

在此链接AVCaptureVideoPreviewLayer中找到我的答案。我需要使用videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill代替videoPreviewLayer.contentsGravity = AVLayerVideoGravityResizeAspectFill

答案 1 :(得分:1)

对我来说,我的问题的答案由NSGangster在以下问题中提供:

  

我将其放在viewDidLayoutSubviews()中,以便可以为captureView.frame(它是我的PreviewLayer所在的UIView)获得正确的大小。

我最初在viewDidLoad()中有代码,这意味着在确定视图的真实边界之前,该层正在调整大小。

感谢分享。