AVCaptureVideoPreviewLayer预览位置开始于导航栏(toolbar)下

AVCaptureVideoPreviewLayer preview position starts under navigation bar(toolbar)

嗨,我是 swift 的新蜜蜂。尝试将 AVCaptureVideoPreviewLayer 用于我的自定义相机应用程序。但是捕获的图像与预览的图像不同。 尝试关注

 self.previewLayer.frame = self.view.layer.bounds
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill

这是我的代码片段

 self.previewLayer.frame = self.view.layer.bounds
        self.view.layer.insertSublayer(self.previewLayer!, at: 0 )
        previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
         captureSession.startRunning()

        let dataOutput = AVCaptureVideoDataOutput()
        dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString):NSNumber(value:kCVPixelFormatType_32BGRA)]

        dataOutput.alwaysDiscardsLateVideoFrames = true[capture screen][1]

image]2]2

UINavigationController 默认以(x:0,y:0) 开头的视图位置。导航栏与视图重叠 64px(20px = 状态栏,44px = 导航栏)高度。您有两个选项修复视频预览图层框架:

选项 1:

改变previewLayer的Y位置,

var frame = self.view.layer.bounds
frame.origin.y = 64
frame.size.height = frame.size.height-64
self.previewLayer.frame = frame

选项2:

self.navigationController?.navigationBar.isTranslucent = false,

在 ViewdidLoad() 方法中添加这一行。 默认isTranslucent = true,赋值false表示View frame位置从x:0和y:64开始。

无需使用 Option2

更改代码