Sie können einen großen QRCode Scanner mit ZXingObjC machen. Es handelt sich um eine Barcode-Bildverarbeitungsbibliothek, die sowohl für iOS-Geräte als auch für Mac-Anwendungen entwickelt wurde. Es scannt vom Live-Video oder von Bildern in Ihrer Fotobibliothek und unterstützt alle wichtigen QRCode-Formate.
Dies ist nur, um Sie in die richtige Richtung zu starten. Sie benötigen mehr Methoden zum Einrichten der Kamera usw. ZXingObjC enthält Beispielprojekte und es gibt Kamera-Setup-Lösungen in ganz SO, so dass es ziemlich einfach ist.
Sie müssen ZXingObjC-Pods pod 'ZXingObjC'
installieren sowie natürlich eine bridging-header.h
-Datei erstellen, um die ZXingObjC-Bibliothek verwenden zu können.
ViewController.swift
import UIKit
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var labelOutput: UILabel!
@IBOutlet weak var QRImage: UIImageView!
var imagePicker = UIImagePickerController()
// imagePicker delegate is itself (UIImagePickerController)
override func viewDidLoad() {
super.viewDidLoad()
imagePicker.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func scanQRCode(sender: AnyObject) {
imagePicker.sourceType = .PhotoLibrary
imagePicker.allowsEditing = false
presentViewController(imagePicker, animated: true, completion: nil)
}
// set up the picker
// initialize luminance source, scanning algorithm, decoding of bitmap, reader helpers, decoder
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
let placeHolderImage:UIImage = info[UIImagePickerControllerOriginalImage] as! UIImage
QRImage.contentMode = .ScaleAspectFit
QRImage.image = placeHolderImage
dismissViewControllerAnimated(true, completion: nil)
let luminanceSource: ZXLuminanceSource = ZXCGImageLuminanceSource(CGImage: placeHolderImage.CGImage)
let binarizer = ZXHybridBinarizer(source: luminanceSource)
let bitmap = ZXBinaryBitmap(binarizer: binarizer)
let hints: ZXDecodeHints = ZXDecodeHints.hints() as! ZXDecodeHints
let QRReader = ZXMultiFormatReader()
// throw/do/catch and all that jazz
do {
let result = try QRReader.decode(bitmap, hints: hints)
labelOutput.text = result.text
} catch let err as NSError {
print(err)
}
}
// Conform to ZXCaptureDelegate
func captureResult(capture: ZXCapture!, result: ZXResult!) {
// do some stuff
return
}
}
Eine Anmerkung: Ab diesem Beitrag gibt es einen bekannten initializer Fehler in der ZXParsedResult.m
Datei der Bibliothek. die Bibliothek der Speicherort der Datei in Xcode ist nach der Installation: Project -> Pods -> ZXingObjC -> All -> ZXParsedResult.m
On line 29 Ändern der Objective-C-Code
+ (id)parsedResultWithType:(ZXParsedResultType)type {
return [[self alloc] initWithType:type];
}
zu
+ (id)parsedResultWithType:(ZXParsedResultType)type {
return [(ZXParsedResult *)[self alloc] initWithType:type];
}
zbar ist eine sehr gute Bibliothek, Hör zu. Es sollte diese Funktion haben. – RJE
Sie können dies erreichen, indem Sie die AVCaptureSession-Klasse des AVFoundation-Frameworks in Objective-C oder Swift verwenden. Überprüfen Sie gut erklärt Tutorial von [Appcoda hier] (http://www.appcoda.com/qr-code-reader-swift/) –
@ cod3rite: Ich habe niemanden abstimmen. –