ZBar qrcode库不适用于IOS

时间:2013-04-29 09:43:15

标签: ios qr-code

我正在为Iphone和Ipad开发QR码阅读器。我正在使用ZBar库来读取qr代码。但是当我专注于任何qr代码时,应用程序什么都不做。我正在使用文档部分中zbar站点上提供的代码。这是我的代码:

 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

功能我正在检索像这样的qrcode

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

3 个答案:

答案 0 :(得分:4)

为什么不使用ZBarReaderViewDelegate?

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

答案 1 :(得分: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];
    }

使用以下方式获取/检索:

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

答案 2 :(得分:2)

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

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

将符号系统ZBAR_QRCODE的配置ZBAR_CFG_ENABLE设置为0 (false)。这意味着您实际上正在禁用QRCodes扫描。

disabling unused symbologies上的Zlib文档解释了:

  

例如,如果您只对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被禁用。