0

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

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

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

-(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,而不是当我开始扫描时,我已经在相机的框架中有一个 qr 码,imagePickerController 会被执行(我检查)但dismissViewControllerAnimated:YES不会关闭任何东西,也不会在“完成”之后执行块(而是正确执行并nslogging“测试”)

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

4

1 回答 1

2

我遇到了同样的问题,并找到了解决方法。在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);
}
于 2013-03-30T00:58:32.557 回答