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
更改代码
嗨,我是 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]
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
更改代码