AVCaptureMetadataOutputObjectsDelegate function is not a call
I am trying to create a barcode scanner with swift on ios 8, the problem is that I cannot get the result of the delegate capture function as below.
class SecondViewController: UIViewController , AVCaptureMetadataOutputObjectsDelegate {
var captureSession = AVCaptureSession()
var previewLayer = AVCaptureVideoPreviewLayer()
var captureDevice : AVCaptureDevice?
var metaDataOutput = AVCaptureMetadataOutput()
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func ScanBarcode(sender: UIButton) {
captureSession.sessionPreset = AVCaptureSessionPresetHigh
let devices = AVCaptureDevice.devices()
// device
for device in devices {
// Make sure this particular device supports video
if (device.hasMediaType(AVMediaTypeVideo)) {
// Finally check the position and confirm we've got the back camera
if(device.position == AVCaptureDevicePosition.Back) {
captureDevice = device as? AVCaptureDevice
}
}
}
if captureDevice != nil {
var err : NSError? = nil
//input
var input : AVCaptureDeviceInput = AVCaptureDeviceInput(device: captureDevice, error: &err)
if err != nil {
println(" we have error: \(err?.localizedDescription)")
}
//preview layer
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
var bounds:CGRect = self.view.layer.bounds
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer.bounds = bounds
previewLayer.position = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds))
cameraView.layer.addSublayer(previewLayer)
//Session
if captureSession.canAddOutput(metaDataOutput) && captureSession.canAddInput(input)
{
println("adding out put to session ")
captureSession.addInput(input)
captureSession.addOutput(metaDataOutput);
}
//output
let metadataQueue = dispatch_queue_create("com.1337labz.featurebuild.metadata", nil);
metaDataOutput.setMetadataObjectsDelegate( self, queue: metadataQueue)
metaDataOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code]
cameraView.hidden = false
captureSession.startRunning()
println("array \(metaDataOutput.metadataObjectTypes)")
}
else{
println("no device found")
}
}
this function is not called i think this is where you get data
func captureOutput(captureOutput: AVCaptureOutput!,didOutputMetadataObjects metadataObjects[AnyObject]!,fromConnection connection:AVCaptureConnection!){
println("processing output")
}
edit: it works, I was just trying to scan the wrong barcodes
+3
source to share
No one has answered this question yet
Check out similar questions: