Ausgabe
Ich muss einen QR-Code-Reader in die App integrieren und habe ein Tutorial dafür gefunden.
Ich habe Z-bar sdk von diesem Link heruntergeladen .
Hier ist, was ich getan hatte.
In QRscannerViewController.m
-(IBAction)StartScan:(id) sender
{
ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
reader.readerView.torchMode = 0;
ZBarImageScanner *scanner = reader.scanner;
// TODO: (optional) additional reader configuration here
// EXAMPLE: disable rarely used I2/5 to improve performance
[scanner setSymbology: ZBAR_I25
config: ZBAR_CFG_ENABLE
to: 0];
// present and release the controller
[self presentModalViewController: reader
animated: YES];
[reader release];
resultTextView.hidden=NO;
}
- (void) readerControllerDidFailToRead: (ZBarReaderController*) reader
withRetry: (BOOL) retry{
NSLog(@"the image picker failing to read");
}
- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info
{
NSLog(@"the image picker is calling successfully %@",info);
// ADD: get the decode results
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
NSString *hiddenData;
for(symbol in results)
hiddenData=[NSString stringWithString:symbol.data];
NSLog(@"the symbols is the following %@",symbol.data);
// EXAMPLE: just grab the first barcode
// break;
// EXAMPLE: do something useful with the barcode data
//resultText.text = symbol.data;
resultTextView.text=symbol.data;
NSLog(@"BARCODE= %@",symbol.data);
NSUserDefaults *storeData=[NSUserDefaults standardUserDefaults];
[storeData setObject:hiddenData forKey:@"CONSUMERID"];
NSLog(@"SYMBOL : %@",hiddenData);
resultTextView.text=hiddenData;
[reader dismissModalViewControllerAnimated: NO];
}
Alle benötigten Frameworks wurden hinzugefügt, also gibt es keine referenced from
Fehler.
Wenn ich auf die Scan-Schaltfläche klicke, wird der ZBarReaderViewController gut angezeigt und ich halte die Alt-Taste gedrückt und klicke mit der linken Maustaste, um die Fotobibliothek des Simulators zu öffnen, und alles funktioniert einwandfrei.
Was das Problem ist,
- Das QR-Bild wird nicht gescannt, dh
imagePickerController:
(UIImagePickerController*) reader didFinishPickingMediaWithInfo
die Funktion wird nicht aufgerufen. - Das QR-Bild erscheint größer als seine Originalgröße.
Wie löst man das?
Warum wird das Bild nicht gescannt?
Lösung
Verwenden Sie ZBar SDK zum Scannen von BR- und QR-Codes in unserer iPhone-Anwendung.
Sie können Schritt-für-Schritt-Artikel dazu finden, wie Sie auch mit Beispielcode vorgehen
So verwenden Sie den Barcode-Scanner (BR und QR) im iPhone-Tutorial (mit ZBar)
sehen, wie es funktioniert
-
Laden Sie ZBar SDK hier herunter
-
Fügen Sie die folgenden Frameworks in Ihrem Projekt hinzu
- AVFoundation.framework
- CoreGraphics.framework
- CoreMedia.framework
- CoreAudio.framework
- CoreVideo.framework
- QuartzCore.framework
- libiconv.dylib
-
Fügen Sie die heruntergeladene Bibliothek libzbar.a von zip in den Frameworks hinzu
-
Importieren Sie den Header in Ihre Klasse und bestätigen Sie den Delegaten
#importiere “ZBarSDK.h”
und
@interface ViewController : UIViewController <ZBarReaderDelegate>
5.Bild scannen
- (IBAction)startScanning:(id)sender {
NSLog(@"Scanning..");
resultTextView.text = @"Scanning..";
ZBarReaderViewController *codeReader = [ZBarReaderViewController new];
codeReader.readerDelegate=self;
codeReader.supportedOrientationsMask = ZBarOrientationMaskAll;
ZBarImageScanner *scanner = codeReader.scanner;
[scanner setSymbology: ZBAR_I25 config: ZBAR_CFG_ENABLE to: 0];
[self presentViewController:codeReader animated:YES completion:nil];
}
6. Geben Sie das Ergebnis ein
- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info
{
// get the decode results
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
// just grab the first barcode
break;
// showing the result on textview
resultTextView.text = symbol.data;
resultImageView.image = [info objectForKey: UIImagePickerControllerOriginalImage];
// dismiss the controller
[reader dismissViewControllerAnimated:YES completion:nil];
}
Ich hoffe, dies wird Ihnen helfen. Lassen Sie es mich auch wissen, wenn Sie in diesem Beispiel Probleme finden. Ich helfe gerne
Beantwortet von – swiftBoy
Antwort geprüft von – David Marino (FixError Volunteer)