0

我正在为 Iphone 和 Ipad 开发 QR 码阅读器。我正在使用 ZBar 库来读取二维码。但是当我专注于任何二维码时,应用程序什么也不做。我正在使用 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];
4

3 回答 3

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);
}
于 2013-04-29T10:26:03.817 回答
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];
    }
于 2013-04-29T10:26:05.670 回答
2

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

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

正在将符号系统ZBAR_QRCODE的配置设置ZBAR_CFG_ENABLE0 (false). 这意味着您实际上是在禁用二维码扫描。

关于禁用未使用符号的 Zlib 文档解释说:

例如,如果您只对二维码感兴趣,请禁用其他二维码。执行此操作的可靠方法是禁用所有符号系统,然后仅重新启用您想要的符号系统。在您准备好处理它们之前,这有助于您避免遇到可能会在库的未来版本中添加的新符号:

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

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

以下是支持的符号系统列表。

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

于 2013-08-02T19:13:11.183 回答