2012-07-04 100 views
0

我使用zbarSDK QR码阅读器http://zbar.sourceforge.net/iphone/sdkdoc/dismissViewControllerAnimated并没有消除使用ZbarSDK QR码阅读器

的SDK是非常伟大的,但我遇到了一个小问题。我需要用户在开始扫描之前可视化一个视图(包含有关如何扫描的信息),而不是按下一个使扫描开始(显示相机)的按钮,以及何时扫描qr码以查看另一个视图与特定的qr代码链接的东西。 我已经这样做了,但是当我开始扫描后在之后构建二维码,但是如果在开始扫描时qr代码是已经在视频相机视图中已经构造了,那么该方法就不行。

当我开始扫描我使用

[self presentModalViewController: reader 
         animated: YES]; 

显示视频摄像机和扫描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]; 
} 

。 然后当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不会消除任何东西,并且在“完成”(而不是正确执行并且nslogging“test”)之后不执行该块。

问题是什么? presentModalViewController没有足够的时间让dismissViewControllerAnimated起作用吗?如果问题是这个,我该如何避免它?

+0

您是否在解雇时检查'reader'值?这是对的吗?你在使用ARC吗? – sergio

+0

我该如何检查其价值?至今我试过NSLog(@“PRESENTED:%@”,[self presentedViewController]);并且在这两种情况下都有效地提供了一个ZBarReaderViewController ...我没有使用ARC,因为与另一个SDK有关的问题与ARV有一些问题,我无法解决。 –

+0

哦,我忘了说,在有问题的情况下,如果我框架的另一件事情,而不是框架的qrcode解雇做它的工作 –

回答

2

我有同样的问题,并找到了解决这个问题。 Set scanCrop property in reader如下所示presentViewController并在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); 
} 
+0

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

+0

不适用于我:_( –