swift 4 中未为 QR 扫描器调用 AVCaptureMetadataOutputObjectsDelegate

AVCaptureMetadataOutputObjectsDelegate not called in swift 4 for QR scanner

我在 iOS 上开发 QR 码扫描器应用程序,我在委托方法 captureOutput:didOutputMetadataObjects:fromConnection: 上获得输出 AVCaptureOutput

它在 swift 3 上运行完美。在我更新到 xcode 9 和 swift 4 后,它停止工作了。

好的,我找到了更新

发现AVCaptureMetadataOutputObjectsDelegate方法有变化

来自

captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!)

metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection)

更改此委托方法后,它现在工作正常。

在 Swift 4:

替换

let metadataOutput = AVCaptureMetadataOutput()
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = metadataOutput.availableMetadataObjectTypes

与:

let metadataOutput = AVCaptureMetadataOutput()
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
let supportedCodeTypes = [AVMetadataObject.ObjectType.upce,
                          AVMetadataObject.ObjectType.code39,
                          AVMetadataObject.ObjectType.code39Mod43,
                          AVMetadataObject.ObjectType.code93,
                          AVMetadataObject.ObjectType.code128,
                          AVMetadataObject.ObjectType.ean8,
                          AVMetadataObject.ObjectType.ean13,
                          AVMetadataObject.ObjectType.aztec,
                          AVMetadataObject.ObjectType.pdf417,
                          AVMetadataObject.ObjectType.qr]

metadataOutput.metadataObjectTypes = supportedCodeTypes