Skip to content

Instantly share code, notes, and snippets.

@madcato
Last active August 29, 2015 14:26
Show Gist options
  • Save madcato/44956d5fda158a4e9aee to your computer and use it in GitHub Desktop.
Save madcato/44956d5fda158a4e9aee to your computer and use it in GitHub Desktop.
Capture a QR with iPhone camera.
//
// QRCaptureViewController.swift
// ScanQR
//
// Created by Daniel Vela on 06/08/15.
// Copyright (c) 2015 veladan. All rights reserved.
//
import UIKit
import AVFoundation
class QRCaptureViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
var captureSession: AVCaptureSession?
var videoPreviewLayer: AVCaptureVideoPreviewLayer?
// View port to display the video capture preview
@IBOutlet weak var viewPreview: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
self.startReading()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func startReading() -> Bool {
var error: NSError?
var captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
var input: AVCaptureInput = AVCaptureDeviceInput.deviceInputWithDevice(captureDevice, error: &error) as! AVCaptureInput
if let error = error {
NSLog("%@", error.localizedDescription)
return false
}
captureSession = AVCaptureSession()
captureSession!.addInput(input);
var captureMetadataOutput = AVCaptureMetadataOutput()
captureSession!.addOutput(captureMetadataOutput)
var dispatchQueue: dispatch_queue_t;
dispatchQueue = dispatch_queue_create("myqueue", nil)
captureMetadataOutput.setMetadataObjectsDelegate(self, queue: dispatchQueue)
captureMetadataOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode]
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
videoPreviewLayer?.frame = viewPreview!.layer.bounds
viewPreview?.layer.addSublayer(videoPreviewLayer)
captureSession?.startRunning()
return true;
}
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
if let metadataObjects = metadataObjects {
if metadataObjects.count > 0 {
var metadataObj = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
if metadataObj.type == AVMetadataObjectTypeQRCode {
NSLog("Cpature: %@", metadataObj.stringValue)
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment