2013-04-29 65 views
0

我正在为Iphone和Ipad开发QR码阅读器。我正在使用ZBar库来读取qr码。但是当我专注于任何二维码时,应用程序什么都不做。我正在使用在文档部分的zbar网站上给出的代码。这里是我的代码:ZBar qrcode库不适用于IOS

ZBarReaderViewController *barReader = [ZBarReaderViewController new]; 
    barReader.readerDelegate = self; 
    [barReader.scanner setSymbology:ZBAR_QRCODE config:ZBAR_CFG_ENABLE to:0]; 
    barReader.readerView.zoom = 1.0; 
    barReader.showsCameraControls = NO; 
    barReader.showsZBarControls = NO; 
    barReader.wantsFullScreenLayout = NO; 
    barReader.title = @"QRCode Reader"; 
    [self presentModalViewController:barReader animated:YES]; 

而且在

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 

功能我正在检索这样

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 
    ZBarSymbolSet *symbols = [info objectForKey:ZBarReaderControllerResults]; 
    ZBarSymbol *symb = nil; 
    NSString *qrCode = nil; 

    for(symb in symbols) 
    { 
     qrCode = [NSString stringWithString:symb.data]; 
    } 

    NSLog(@"The results = %@",qrCode); 

[self dismissModalViewControllerAnimated:YES]; 

回答

2

这个代码是对我工作: .h文件中

 ADD delegate protocol 
     <ZBarReaderDelegate> 

.m文件

进行扫描

- (IBAction) scanButtonClick 
    { 

       ZBarReaderViewController *reader = [ZBarReaderViewController new]; 
       reader.readerDelegate = self; 
       reader.supportedOrientationsMask = ZBarOrientationMaskAll; 
       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]; 
    } 

获取/ retrive使用:

- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info 
    { 
     // ADD: get the decode results 
     id<NSFastEnumeration> results = 
     [info objectForKey: ZBarReaderControllerResults]; 
     ZBarSymbol *symbol = nil; 
     for(symbol in results) 
      // EXAMPLE: just grab the first barcode 
      break; 

     // EXAMPLE: do something useful with the barcode data 
     resultText.text = symbol.data; 

     // EXAMPLE: do something useful with the barcode image 
     resultImage.image = 
     [info objectForKey: UIImagePickerControllerOriginalImage]; 

     // ADD: dismiss the controller (NB dismiss from the *reader*!) 
     [reader dismissModalViewControllerAnimated: YES]; 
    } 
4

为什么你不使用ZBarReaderViewDelegate的QR码?

- (void)readerView:(ZBarReaderView *)view didReadSymbols:(ZBarSymbolSet *)syms fromImage:(UIImage *)img 
{ 
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 

    for (ZBarSymbol *sym in syms) 
    { 
     qrCode = [NSString sym.data]; 
    } 

    NSLog(@"The results = %@",qrCode); 
} 
+0

当然,你的委托(readerDelegate) – user1226119 2013-12-20 13:00:10

2

默认情况下启用所有符号系统。您的代码

[barReader.scanner setSymbology:ZBAR_QRCODE config:ZBAR_CFG_ENABLE to:0]; 

是符号ZBAR_QRCODE的配置ZBAR_CFG_ENABLE设置为0 (false)。这意味着你实际上禁用QRCodes的扫描。

zlib的文档上disabling unused symbologies解释说:

例如,如果你只对QR码感兴趣,禁用 别人。实现这一目标的强大方法是禁用所有符号系统,然后仅重新启用您需要的那些符号系统。这有助于从 隔离您遇到可能在 图书馆未来的版本中添加新的符号,直到您准备来处理它们:

// disables all symbologies 
[scanner setSymbology: 0 
     config: ZBAR_CFG_ENABLE 
     to: 0]; 

// enables QRCode 
[scanner setSymbology: ZBAR_QRCODE 
     config: ZBAR_CFG_ENABLE 
     to: 1]; 

Here是支持的符号列表。

SAMIR RATHOD的答案有效,因为只有符号系统ZBAR_I25被禁用。