dismissViewControllerAnimated不使用ZbarSDK qr代码阅读器解散

时间:2012-07-04 12:08:43

标签: objective-c view

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

SDK非常棒,但我遇到了一些问题。我需要用户在开始扫描之前可视化视图(包含有关如何扫描的信息),而不是按下使扫描开始的按钮(显示相机)以及何时扫描qr代码以查看另一个视图显示与特定qr代码相关的东西。 我已经完成了这个,但是当我在开始扫描后构建qr代码时,它会很顺利,但是当我开始扫描时,qr代码已经已经构成了 em>在摄像机视图中。

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

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

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

- (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并没有解雇任何东西,并且在完成&#34;之后没有执行该块。 (而是正确执行和nslogging&#34; test&#34;)

问题是什么? presentModalViewController没有时间允许dismissViewControllerAnimated运行吗?如果问题是这样我怎么能避免呢?

1 个答案:

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