【发布时间】:2016-09-11 16:00:41
【问题描述】:
我正在尝试在 Swift3 和 iOS 10 beta 设备中使用 AVCaptureMetadataOutputObjectsDelegate 捕获 QR 码。
但是captureOutput 函数在二维码被设备的摄像头实际捕获时不会被调用。
有人对此有解决方案吗?如果是这样,请告诉我如何修复和正常工作。
谢谢,
import UIKit
import AVFoundation
class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let mySession: AVCaptureSession! = AVCaptureSession()
let devices = AVCaptureDevice.devices()
var myDevice: AVCaptureDevice!
for device in devices! {
if((device as AnyObject).position == AVCaptureDevicePosition.back){
myDevice = device as! AVCaptureDevice
}
}
let myVideoInput = try! AVCaptureDeviceInput.init(device: myDevice)
if mySession.canAddInput(myVideoInput) {
mySession.addInput(myVideoInput)
}
let myMetadataOutput: AVCaptureMetadataOutput! = AVCaptureMetadataOutput()
if mySession.canAddOutput(myMetadataOutput) {
mySession.addOutput(myMetadataOutput)
myMetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
myMetadataOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode]
}
let myVideoLayer = AVCaptureVideoPreviewLayer.init(session: mySession)
myVideoLayer?.frame = self.view.bounds
myVideoLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
self.view.layer.addSublayer(myVideoLayer!)
mySession.startRunning()
}
// MARK: - AVCaptureMetadataOutputObjectsDelegate
// This function is not called despite capturing QR code
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, from connection: AVCaptureConnection!) {
if metadataObjects.count > 0 {
let qrData: AVMetadataMachineReadableCodeObject = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
print("\(qrData.type)")
print("\(qrData.stringValue)")
}
}
}
【问题讨论】:
标签: ios swift avfoundation swift3 ios10