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
我在 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