使用 ZbarSDK 二维码阅读器时,dismissViewControllerAnimated 不会关闭

Posted

技术标签:

【中文标题】使用 ZbarSDK 二维码阅读器时,dismissViewControllerAnimated 不会关闭【英文标题】:dismissViewControllerAnimated doesn't dismiss using ZbarSDK qr code reader 【发布时间】:2012-07-04 12:08:42 【问题描述】:

我正在使用 zbarSDK 二维码阅读器http://zbar.sourceforge.net/iphone/sdkdoc/

SDK 非常棒,但我遇到了一个小问题。我需要用户在开始扫描之前可视化一个视图(包含有关如何扫描的信息),然后他按下一个按钮使扫描开始(显示相机)并且当二维码被扫描到另一个视图显示与特定二维码相关的东西。 我已经这样做了,但是当我在开始扫描之后 构筑 qr 码时一切顺利,但如果当我开始扫描时 qr 码 已经构架则不会在摄像机视图中。

当我开始扫描时,我会这样做

-(IBAction)StartScan:(id) sender

    ZBarReaderViewController *reader = [ZBarReaderViewController new];
    reader.readerDelegate = self;

    reader.readerView.torchMode = 0;

    ZBarImageScanner *scanner = reader.scanner;

    // present and release the controller
    [self presentModalViewController: reader
                        animated: YES];
    [reader release];

使用

[self presentModalViewController: reader
                        animated: YES];

显示摄像机并扫描二维码。 然后当二维码被扫描时,我会这样做:

- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info
    
      id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
      ZBarSymbol *symbol = nil;

      for(symbol in results)
          hiddenData=[NSString stringWithString:symbol.data];

        [reader dismissViewControllerAnimated:YES completion:^ NSLog(@"Test"); ];

    [self performSegueWithIdentifier:@"aDettaglioOpera" sender:self];

关闭相机视图

 [reader dismissViewControllerAnimated:YES completion:^ NSLog(@"Test"); ];

并呈现链接到以下segue的视图。

如果将相机指向没有 qrcode 的点然后将其指向 qrcocde,那么现在一切顺利已执行(我检查过),但 dismissViewControllerAnimated:YES 不会关闭任何内容,也不会在“完成”之后执行块(而是正确执行并 nslogging“测试”)

有什么问题? presentModalViewController 没有时间让dismissViewControllerAnimated 发挥作用?如果问题是这样,我该如何避免呢?

【问题讨论】:

你在关闭reader值时检查它了吗?这是正确的吗?你在使用 ARC 吗? 我如何检查它的值?到目前为止,我尝试了一个 NSLog(@"PRESENTED: %@",[self presentViewController]);并且在这两种情况下都有效地提供了 ZBarReaderViewController ...我没有使用 ARC,因为与另一个 SDK 相关联的问题与我无法解决的 ARV 有一些问题。 哦,我忘了说,在有问题的情况下,如果我框住另一件事,而不是框住 qrcode,那么解雇就可以了 我也试过一个 NSLog(@"PRESENTED: %@",reader);在presentModalViewController之后和dismissViewControllerAnimated之前,值是一样的...... 【参考方案1】:

我遇到了同样的问题,并找到了解决此问题的方法。 在 presentViewController 之前在 reader 中设置 scanCrop 属性,如下所示,并在 1 秒后将其恢复为默认值 (0, 0, 1, 1)。好用!!!

reader.scanCrop = CGRectMake(0, 0, 0.5, 0.5);
[self performSelector:@selector(changeScanCrop) withObject:nil afterDelay:1.0];

-(void)changeScanCrop 
    reader.scanCrop = CGRectMake(0, 0, 1, 1);

【讨论】:

我会尽快尝试!我还没有解决问题!!非常感谢!

以上是关于使用 ZbarSDK 二维码阅读器时,dismissViewControllerAnimated 不会关闭的主要内容,如果未能解决你的问题,请参考以下文章

iOS之使用ZbarSDK实现扫描二维码以及条形码功能

二维码框架ZBarSDK的使用和自己定义二维码扫描界面方法

当我尝试运行我的 Xcode 项目时,它显示我上传图像的链接器错误

zbarsdk ZBarReaderViewController - 为 ipad 设置全屏

使用 ZBarSDK 时 iPhone 相机失去自动对焦

Dismis showDetailViewController swift