【问题标题】:How to add overlay on AVCaptureVideoPreviewLayer?如何在 AVCaptureVideoPreviewLayer 上添加叠加层?
【发布时间】:2017-06-11 04:30:03
【问题描述】:

我正在使用 Swift 构建一个需要二维码扫描功能的 iOS 应用。

我已经使用 AVFoundation 实现了 QR 码扫描仪,现在我的捕获屏幕看起来与视频录制屏幕相同,即 AVCaptureVideoPreviewLayer 显示相机正在捕获的内容。

但由于它是 QR 码扫描仪,而不是常规的图像或视频捕获,我希望我的 VideoPreviewLayer 看起来像这样:

我知道这可以通过在一个 VideoPreviewLayer 之上添加另一个 VideoPreviewLayer 来实现。

我的问题是:

  1. 如何将边框仅添加到上(或更小)预览层的边缘?

  2. 如何更改VideoPreviewLayer 在后台的亮度级别?

  3. 如何忽略背景层捕获的媒体?

【问题讨论】:

  • 我会混合@Singh 建议的教程框架视图并使用这篇文章:stackoverflow.com/q/44282738/3900902 来创建角落。希望这会有所帮助。
  • @Paulo : Singh 建议的教程框架视图?
  • 哦,他们删除了答案。这是该教程:appcoda.com/barcode-reader-swift。至于渐变层,我不擅长 iOS/swift,但我假设你会添加一个不透明度较低的子层

标签: ios swift avfoundation avcapturesession


【解决方案1】:

您不应使用其他 VideoPreviewLayer。相反,您应该添加两个子图层 - 一个用于蒙版背景区域,一个用于角落。

查看repo 中的源代码作为示例。

要将视频捕获限制在遮罩区域,您必须设置 rectOfInterestAVCaptureMetadataOutput

let rectOfInterest = videoPreviewLayer.metadataOutputRectConverted(fromLayerRect: rect)
metadataOutput.rectOfInterest = rectOfInterest

【讨论】:

    【解决方案2】:

    长话短说:您可以使用AVCaptureVideoPreviewLayer 进行视频捕捉,创建另一个CALayer() 并使用layer.insertSublayer(..., above: ...) 在视频层上方插入您的“自定义”层,而自定义我的意思是又一个CALayer让我们说

    layer.contents = spinner.cgImage
    

    这里还有一点detailed instructions

    【讨论】:

      猜你喜欢
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      相关资源
      最近更新 更多