[FIXED] QR-Code-Scannen in der iOS-Anwendung

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 fromFehler.

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,

  1. Das QR-Bild wird nicht gescannt, dh imagePickerController:
    (UIImagePickerController*) reader didFinishPickingMediaWithInfo

    die Funktion wird nicht aufgerufen.
  2. Das QR-Bild erscheint größer als seine Originalgröße.

Geben Sie hier die Bildbeschreibung ein

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

  1. Laden Sie ZBar SDK hier herunter

  2. Fügen Sie die folgenden Frameworks in Ihrem Projekt hinzu

    • AVFoundation.framework
    • CoreGraphics.framework
    • CoreMedia.framework
    • CoreAudio.framework
    • CoreVideo.framework
    • QuartzCore.framework
    • libiconv.dylib
  3. Fügen Sie die heruntergeladene Bibliothek libzbar.a von zip in den Frameworks hinzu

  4. 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

Offizielle Dokumente


Beantwortet von –
swiftBoy


Antwort geprüft von –
David Marino (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like