在整合zxing for iPhone时管理视图

时间:2012-02-13 15:38:37

标签: iphone objective-c ios zxing

我正在尝试将zxing集成到我现有的iPhone应用中。我已经参考了项目下载中附带的ScanTest示例,并成功构建并运行了扫描程序。

我的问题在于管理项目的视图以合并扫描仪。目前我有一个已经存在的视图控制器(VC-A),它需要扫描仪功能。我创建了一个新的视图控制器(VC-B)来启动ZXingWidgetController扫描仪视图。所以流程如下所示:

  

VC-A-> presentModalViewController(VC-B) - > VC-B->   presentModalViewController(ZXingWidgetController)

现在,与ScanTest示例应用程序一样,扫描完成后,将从VC-B调用dissmissModalViewController,它会解除ZXingWidgetController的视图。问题是我尝试的任何方式,我无法解雇VC-B回到VC-A。当扫描完成/取消时,我已经创建了一组委托方法来通知VC-A。我在这些方法中获得扫描数据,但无法忽略VC-B的视图。

我不想修改我已经存在的视图控制器VC-A,因此我无法直接在其中合并ZXingWidgetController,完全丢弃VC-B(因为它需要使VC-A成为.mm文件)。

修改 现在我完全放弃了ZXingWidgetController的模态。在VC-B上的viewDidLoad中使用此代码

//Create custom overlay
OverlayView *scannerView = [[OverlayView alloc]initWithFrame:CGRectMake(27, 107, 267, 253) cancelEnabled:NO oneDMode:NO];
scannerView.displayedMessage = nil;
widController = [[ZXingWidgetController alloc]init ];

//set the overlay of widController
[widController setOverlayView:scannerView];

QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];
[qrcodeReader release];
widController.readers = readers;
widController.delegate = self;
[readers release];
[scannerView release];
NSBundle *mainBundle = [NSBundle mainBundle];
widController.soundToPlay = [NSURL fileURLWithPath:[mainBundle pathForResource:@"beep-beep" ofType:@"aiff"] isDirectory:NO];

//Add scanner to the view
  [self.view addSubview:widController.view];

现在根本看不到ZXingWidgetController的摄像机视图。有人为Zxing定制了叠加层吗?我似乎没有在SO上发现任何类似的问题。

2 个答案:

答案 0 :(得分:3)

使用ZXing,您可以直接访问叠加视图并添加/更改其子视图。例如,将imageview置于此概述之上,如下所示:

ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];

UIImage *qrOverlayImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"overlay-image" ofType:@"png"]];

UIImageView *qrOverlayImageView = [[[UIImageView alloc] initWithImage:qrOverlayImage] autorelease];
qrOverlayImageView.contentMode = UIViewContentModeScaleAspectFit;
qrOverlayImageView.backgroundColor = [UIColor clearColor];

[widController.overlayView addSubview:qrOverlayImageView];

使用具有透明度的PNG,添加UILabels等以编程方式创建自定义叠加层。

答案 1 :(得分:2)

只需要考虑一小部分内容;使用Xcode 4.4测试Mountain Lion我因为ZBar而无法获得我现有的一个项目。我不能说ZBar是否会更新以使用Xcode 4.4,或者是否会在Xcode 4.4中发生变化以使ZBar能够正常工作。谁知道!

我已经更新了我的项目以使用Zxing,即使它更难以开始工作和配置。

<强>更新: 我现在开始使用ZXingObjC(https://github.com/TheLevelUp/ZXingObjC)。 它比Zxing更容易上班,而且它还有很多Zxing中缺少的功能。