【问题标题】:Swift - Overlay is not showing over AVCaptureVideoPreviewLayerSwift - 覆盖没有显示在 AVCaptureVideoPreviewLayer
【发布时间】:2019-07-28 14:01:52
【问题描述】:

我正在尝试在预览层上放置一个叠加层,但由于某种原因,我添加到预览层的 UIImageView 未显示。

代码:

let session = AVCaptureSession()
let sessionQueue = DispatchQueue(label: AVCaptureSession.self.description(), attributes: [], target: nil)
let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 240, height: 80))

override func viewDidLoad() {
    super.viewDidLoad()

    imgView.image = UIImage(contentsOfFile: "angleArm.png")

    session.beginConfiguration()
    let videoDevice = AVCaptureDevice.default(.builtInDualCamera, for: AVMediaType.video, position: .back)
    if (videoDevice != nil) {
        let videoDeviceInput = try? AVCaptureDeviceInput(device: videoDevice!)
        if (videoDeviceInput != nil) {
            if (session.canAddInput(videoDeviceInput!)) {
                session.addInput(videoDeviceInput!)
            }
        }
    }

    session.commitConfiguration()

    let previewLayer = AVCaptureVideoPreviewLayer(session: session)
    previewLayer.frame = view.frame

    previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
    self.view.layer.addSublayer(previewLayer)

    let preView = UIView()
    preView.frame = self.view.frame
    preView.addSubview(imgView)
    self.view.addSubview(preView)
    self.view.bringSubviewToFront(preView)

}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    sessionQueue.async {
        self.session.startRunning()
    }
}
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    sessionQueue.async {
        self.session.stopRunning()
    }
}

我已经阅读了一些帖子并尝试使用 CALayer 并将 imageView 添加到其内容中,到目前为止,我尝试创建另一个 UIView,将 imageView 放入其中并将其添加到主视图中,但仍然没有运气。

有人知道我做错了什么吗?提前致谢。

【问题讨论】:

    标签: swift camera avfoundation overlay


    【解决方案1】:

    您应该检查并更改覆盖视图的 zPosition。我认为你应该把overlayView.layer.zPosition > preview.layer.zPosition。

    例如代码: overlayView.layer.zPosition = preview.layer.zPosition + 1

    【讨论】:

    • 我在self.view.bringSubviewToFront(preView) 之后添加了preView.layer.zPosition = self.view.layer.zPosition + 1,但仍然没有显示。
    • 你试试设置 previewLayer.zPosition = -1
    • 还是什么都没有。我将其设置为:previewLayer.zPosition = -1 self.view.layer.addSublayer(previewLayer) let preView = UIView() preView.frame = self.view.frame preView.addSubview(imgView) self.view.addSubview(preView) self.view.bringSubviewToFront(preView) preView.layer.zPosition = self.view.layer.zPosition + 1,但仍然没有显示覆盖。
    【解决方案2】:

    你尝试设置 previewLayer.zPosition = -1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-17
      • 2018-06-13
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      相关资源
      最近更新 更多