我正在使用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不起作用的线索?正如您从红色背景中看到的那样,图层的大小正确,但内容重力不足以填充图层。
答案 0 :(得分:4)
在此链接AVCaptureVideoPreviewLayer中找到我的答案。我需要使用videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
代替videoPreviewLayer.contentsGravity = AVLayerVideoGravityResizeAspectFill
答案 1 :(得分:1)
对我来说,我的问题的答案由NSGangster在以下问题中提供:
我将其放在viewDidLayoutSubviews()中,以便可以为captureView.frame(它是我的PreviewLayer所在的UIView)获得正确的大小。
我最初在viewDidLoad()
中有代码,这意味着在确定视图的真实边界之前,该层正在调整大小。
感谢分享。