【问题标题】:How to make AVCaptureSession scan full screen by swift?如何让 AVCaptureSession 快速扫描全屏?
【发布时间】:2021-04-16 10:24:31
【问题描述】:

我有一个问题,想知道在我所在层的任何地方扫描二维码/条形码。
我只将我的二维码/条形码放在图层中间并获得价值。
当我将二维码/条形码放在右上角时,无法获得价值。

有什么解决办法吗?

private func doInitialSetup() {
    clipsToBounds = true
    captureSession = AVCaptureSession()
        
    guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else { return }
    let videoInput: AVCaptureDeviceInput
    do {
        videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
    } catch let error {
        print(error)
        return
    }
        
    if (captureSession?.canAddInput(videoInput) ?? false) {
        captureSession?.addInput(videoInput)
    } else {
        scanningDidFail()
        return
    }
       
    let metadataOutput = AVCaptureMetadataOutput()
        
    if (captureSession?.canAddOutput(metadataOutput) ?? false) {
        captureSession?.addOutput(metadataOutput)
           
        metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
        metadataOutput.metadataObjectTypes = [.qr, .ean8, .ean13, .pdf417, .code128]
        metadataOutput.rectOfInterest = UIScreen.main.bounds
    } else {
        scanningDidFail()
        return
    }
        
    self.layer.session = captureSession
    self.layer.videoGravity = .resizeAspectFill
        
    captureSession?.startRunning()
}

【问题讨论】:

  • 您找到解决方案了吗?我一直坚持同样的事情。

标签: ios swift avfoundation avcapturesession


【解决方案1】:
metadataOutput.rectOfInterest = UIScreen.main.bounds

肯定是不正确的,这应该是一个包含标准化(即0.0 ... 1.0)值的CGRect。

只要去掉这行,反正默认是“全屏”随便你。

【讨论】:

    猜你喜欢
    • 2014-01-11
    • 1970-01-01
    • 2015-02-01
    • 2012-08-28
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 2022-06-14
    • 2022-07-14
    相关资源
    最近更新 更多