【问题标题】:AVCaptureVideoPreviewLayer preview position starts under navigation bar(toolbar)AVCaptureVideoPreviewLayer 预览位置从导航栏(工具栏)开始
【发布时间】:2017-09-08 11:37:13
【问题描述】:

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

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

这是我的代码 sn-p

 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

【问题讨论】:

    标签: swift swift3 avcapturesession


    【解决方案1】:

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

    选项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

    更改您的代码

    【讨论】:

    • 试过这个。它只是正确显示预览。不是输出图像
    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2014-12-18
    • 2015-04-13
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    相关资源
    最近更新 更多