我已经成功地在其他项目中使用了ZBar,但是在我的最新项目中实现它有问题。它被设置为一个选项卡视图应用程序,其中第一个选项卡是扫描仪,第二个选项卡输出结果。为了解决ZBar使用全屏而不显示选项卡栏的问题,我创建了一个子视图(参见下面的代码)。但是,我在我的其他ZBar项目上也测试了这一点,当您使用子视图时,ZBar不会读取条形码,然后存储编码的数据。相反,动画扫描跟踪器只是四处弹跳。
是否有一些东西,我可以添加到我的代码,将允许我使用ZBar在子视图?或者这是在选项卡应用程序中使用ZBar的错误方式?
下面是我的扫描方法:- (void) presentReader
{
ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
reader.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationPortrait);
reader.showsHelpOnFail = YES;
NSLog(@"reader presented");
ZBarImageScanner *scanner = reader.scanner;
// TODO: (optional) additional reader configuration here
// EXAMPLE: disable rarely used I2/5 to improve performance
[scanner setSymbology: 0
config: ZBAR_CFG_ENABLE
to: 0];
[scanner setSymbology: ZBAR_UPCA
config: ZBAR_CFG_ENABLE
to: 0];
[scanner setSymbology: ZBAR_DATABAR
config: ZBAR_CFG_ENABLE
to: 1];
[scanner setSymbology: ZBAR_DATABAR_EXP
config: ZBAR_CFG_ENABLE
to: 1];
reader.showsCameraControls = NO; // for UIImagePickerController
reader.showsZBarControls = NO;
//reader.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
reader.wantsFullScreenLayout = NO;
reader.videoQuality = UIImagePickerControllerQualityTypeIFrame1280x720;
//Subview
[self.view addSubview:reader.view];
}
这适用于我在UITabBarController -(图像)http://db.tt/cgVxDd0x
我想你的问题是你没有设置reader.scanCrop.
-(void) viewDidAppear:(BOOL)animated {
self.reader = [ZBarReaderViewController new];
self.reader.readerDelegate = self;
self.reader.enableCache = NO;
self.reader.showsZBarControls = NO;
self.reader.wantsFullScreenLayout = NO;
self.reader.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff;
self.reader.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationPortrait);
ZBarImageScanner *scanner = self.reader.scanner;
[scanner setSymbology: ZBAR_I25
config: ZBAR_CFG_ENABLE
to: 0];
self.reader.scanCrop = CGRectMake(0, 0, 1, 1);
[self.view addSubview:self.reader.view];
}
- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info {
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
break;
NSLog(@"%@",symbol.data);
}
我也面临过这样的问题。但是,一旦我把阅读器对象设为全局对象而不是局部对象,这就没问题了