【问题标题】:No way to add a view over a AVCaptureVideoPreviewLayer using StoryBoard?无法使用 StoryBoard 在 AVCaptureVideoPreviewLayer 上添加视图?
【发布时间】:2021-04-01 09:20:00
【问题描述】:

我在 SO 上看到过有关此问题的其他问题,但我的问题不同,因为我正在寻找使用先前使用情节提要创建的结构的解决方案。

我需要在 AVCaptureVideoPreviewLayer 上使用 StackView

我有这样的看法:

我需要创建一个AVCaptureVideoPreviewLayer,将这一层置于您在上一张图片中看到的Stack Control 之下。

我的AVCaptureVideoPreviewLayer 是这样创建的:

let cameraPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
cameraPreviewLayer.videoGravity = .resizeAspectFill
cameraPreviewLayer.connection?.videoOrientation = .portrait
cameraPreviewLayer.frame = view.frame
view.layer.insertSublayer(cameraPreviewLayer, at: 0)

但为了确保图层创建在当前位置,我在Stack Control 下方创建了这个Preview View(见图)。

想法是将AVCaptureVideoPreviewLayer 添加到该视图中。

所以,我将代码更改为:

let cameraPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
cameraPreviewLayer.videoGravity = .resizeAspectFill
cameraPreviewLayer.connection?.videoOrientation = .portrait
cameraPreviewLayer.frame = view.frame
previewView.layer.insertSublayer(cameraPreviewLayer, at: 0)

也试过

previewView.layer.addSublayer(cameraPreviewLayer)

没办法,预览显示正常,但Stack Control 不存在。如果我不插入 AVCaptureVideoPreviewLayer,我会看到堆栈。

有什么想法吗?

【问题讨论】:

    标签: swift avfoundation calayer swift5


    【解决方案1】:

    你需要做的是,

    1. 获取 AVCapturePreviewLayer,并将其作为子层添加到 PreviewView。

      PreviewView.layer.addSublayer(cameraPreviewLayer)

    2. 将 previewView 作为子视图添加到父视图

      view.addSubview(PreviewView)

    3. 并将 StackControl 作为子视图添加到父视图

      view.addSubview(StackControl)

    【讨论】:

    • 理论上这正是我正在“做的”,因为每个元素都已经处于“正确”的水平。据我所知,您是说我必须以编程方式执行此操作,对吧?
    • 我认为您的意思是,在 IB 中,您已经按照相同的顺序安排了所有内容。正确的 ?在这种情况下,您可以将您的应用程序置于调试模式 -> 并在断点中检查视图层次结构以查看堆栈控制器是否正确可见?
    • 堆栈控件可能有问题?你能用一个按钮或其他简单的东西换掉它来检查它是否工作正常吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多