如何让AVCaptureVideoPreviewLayer填满视图灰色区域(Xcode/Swift4/iOS11)
解决相机预览层填满视图灰色区域的问题
嘿,我之前做iOS相机功能时也碰到过一模一样的情况!你当前的问题大概率是预览层没有跟随容器视图的尺寸变化,或是没正确裁剪超出部分导致的,结合你的开发环境(Swift 4、iOS 11、Xcode),给你几个针对性的解决步骤:
1. 给预览层设置自动调整尺寸的掩码
你现在只设置了previewLayer.frame = self.camView.layer.bounds,但如果camView的尺寸后续发生变化(比如屏幕旋转、布局更新),预览层不会自动跟着适配。加上这个掩码,让它能跟随容器视图的宽高自动调整:
previewLayer.autoresizingMask = [.layerWidthSizable, .layerHeightSizable]
2. 开启容器视图的裁剪功能
你设置了videoGravity = .resizeAspectFill,这个属性会让视频画面按比例填满预览层,但超出预览层的部分默认不会被裁剪,可能导致看起来没填满灰色区域。给你的camView开启裁剪:
self.camView.clipsToBounds = true
3. 在布局完成后更新预览层的frame
在viewDidLoad里设置previewLayer.frame的时候,camView的实际尺寸可能还没根据Auto Layout约束计算完成,导致预览层的frame是初始的小尺寸(也就是你看到的黑色区域)。重写viewDidLayoutSubviews方法,在这里更新预览层的frame:
override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() // 每次布局完成后,重新设置预览层的frame为容器视图的bounds previewLayer.frame = self.camView.layer.bounds }
把这几步都加上之后,相机预览画面应该就能完全填满camView的灰色区域了!
内容的提问来源于stack exchange,提问作者noob
相关产品推荐
相关产品推荐

