我正在使用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运行吗?如果问题是这样我怎么能避免呢?
答案 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);
}