para escanear encuentro donde cómo código cual como codigo iphone ios objective-c qr-code

encuentro - escanear codigo qr whatsapp iphone



Escaneo de códigos QR en la aplicación ios (5)

Necesito integrar el lector de códigos QR en la aplicación y encontré un tutorial para él.

Descargué Z-bar sdk desde este link .

Esto es lo que yo había hecho.

En el 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]; }

Se agregaron todos los marcos necesarios, por lo que no se hace referenced from errores.

Cuando hago clic en el botón de escaneo, el ZBarReaderViewController aparece bien y sostengo la tecla alt y hago clic con el botón izquierdo del ratón para abrir la biblioteca de fotos del simulador y todo funciona bien.

Cuál es el problema,

  1. La imagen QR no se escanea, es decir, imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo no se llama a la función del imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo .
  2. La imagen QR aparece más grande que su tamaño original.

¿Cómo resolver esto?

¿Por qué no se escanea la imagen?


Al igual que con el lanzamiento de iOS7 ya no es necesario utilizar un marco o biblioteca externa. El ecosistema de iOS con AVFoundation ahora es totalmente compatible con el escaneo de casi todos los códigos de QR sobre EAN a UPC.

Eche un vistazo a la Nota técnica y la guía de programación de AVFoundation . AVMetadataObjectTypeQRCode es tu amigo.

Aquí hay un buen tutorial que lo muestra paso a paso: la biblioteca de escaneo de códigos QR de iPhone iOS7

Solo un pequeño ejemplo de cómo configurarlo:

#pragma mark - #pragma mark AVFoundationScanSetup - (void) setupScanner { self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; self.session = [[AVCaptureSession alloc] init]; self.output = [[AVCaptureMetadataOutput alloc] init]; [self.session addOutput:self.output]; [self.session addInput:self.input]; [self.output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; self.output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode]; self.preview = [AVCaptureVideoPreviewLayer layerWithSession:self.session]; self.preview.videoGravity = AVLayerVideoGravityResizeAspectFill; self.preview.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); AVCaptureConnection *con = self.preview.connection; con.videoOrientation = AVCaptureVideoOrientationLandscapeLeft; [self.view.layer insertSublayer:self.preview atIndex:0]; }


Prueba esto en iOS 7 y más nuevo.

Para capturar el código QR:

- (IBAction)Capture:(id)sender { isFirst=true; _session = [[AVCaptureSession alloc] init]; _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; NSError *error = nil; _input = [AVCaptureDeviceInput deviceInputWithDevice:_device error:&error]; if (_input) { [_session addInput:_input]; } else { NSLog(@"Error: %@", error); } _output = [[AVCaptureMetadataOutput alloc] init]; [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; [_session addOutput:_output]; _output.metadataObjectTypes = [_output availableMetadataObjectTypes]; _prevLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session]; _prevLayer.frame = self.view.bounds; _prevLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [self.view.layer addSublayer:_prevLayer]; [_session startRunning]; }

Para leer, utiliza su método de delegado:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { CGRect highlightViewRect = CGRectZero; AVMetadataMachineReadableCodeObject *barCodeObject; NSString *detectionString = nil; NSArray *barCodeTypes = @[AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode39Mod43Code, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode93Code, AVMetadataObjectTypeCode128Code, AVMetadataObjectTypePDF417Code, AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode]; for (AVMetadataObject *metadata in metadataObjects) { for (NSString *type in barCodeTypes) { if ([metadata.type isEqualToString:type]) { barCodeObject = (AVMetadataMachineReadableCodeObject *)[_prevLayer transformedMetadataObjectForMetadataObject:(AVMetadataMachineReadableCodeObject *)metadata]; highlightViewRect = barCodeObject.bounds; detectionString = [(AVMetadataMachineReadableCodeObject *)metadata stringValue]; break; } } if (detectionString != nil) { if (isFirst) { isFirst=false; _label.text = detectionString; break; } } else _label.text = @"(none)"; } _highlightView.frame = highlightViewRect; }


Puedes usar mi propio framework para QRCodeReader .

https://www.cocoacontrols.com/controls/qrcodereader

Cómo utilizar

  1. Binarios incrustados
  2. Arrastra y suelta UIView en tu controlador de vista.
  3. Cambiar Clase de UIVIew.
  4. Ate su vista.

Pegue los métodos "M1, M2" en su controlador de vista (es decir, "ViewController.m")

"M1" viewDidLoad

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. self.title = @"QR Code Reader"; [qrCodeView setDelegate:self]; [qrCodeView startReading]; }

Y aquí los métodos de delegado: "M2" QRCodeReaderDelegate

#pragma mark - QRCodeReaderDelegate - (void)getQRCodeData:(id)qRCodeData { UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"QR Code" message:qRCodeData preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Close" style:UIAlertActionStyleDefault handler:nil]; [alertController addAction:cancel]; UIAlertAction *reScan = [UIAlertAction actionWithTitle:@"Rescan" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { [qrCodeView startReading]; }]; [alertController addAction:reScan]; [self presentViewController:alertController animated:YES completion:nil]; }

Gracias.


use ZBar SDK para escanear códigos BR y QR en nuestra aplicación de iPhone.

Puede encontrar un artículo paso a paso para esto, cómo hacerlo con el código de ejemplo también.

Cómo utilizar el escáner de código de barras (BR y QR) en el tutorial de iPhone (con ZBar)

mira como funciona

  1. descarga ZBar SDK desde here

  2. Añade los marcos a continuación en tu proyecto.

    • AVFoundation.framework
    • CoreGraphics.framework
    • CoreMedia.framework
    • CoreAudio.framework
    • CoreVideo.framework
    • QuartzCore.framework
    • libiconv.dylib
  3. Agrega la librería descargada libzbar.a de zip en los frameworks

  4. importar encabezado en su clase y confirmar que es delegado

    #importar "ZBarSDK.h"

y

@interface ViewController : UIViewController <ZBarReaderDelegate>

Imagen 5.scan

- (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. obtener el resultado en

- (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]; }

Espero que esto le ayude, también avíseme si encuentra algún problema en este ejemplo. Feliz de ayudar

Documentos oficiales


Primero importa la biblioteca ZXingWidget desde here .

Prueba esto ,

- (IBAction)btnScanClicked:(id)sender { ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO]; QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init]; NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil]; [qrcodeReader release]; widController.readers = readers; [readers release]; NSBundle *mainBundle = [NSBundle mainBundle]; widController.soundToPlay = [NSURL fileURLWithPath:[mainBundle pathForResource:@"beep-beep" ofType:@"aiff"] isDirectory:NO]; [self presentModalViewController:widController animated:YES]; [widController release]; }

y delegado

- (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result { }