如何更改ZBar读卡器的框架?

时间:2011-07-06 23:23:26

标签: iphone ios objective-c barcode-scanner zbar-sdk

好的,我正在使用ZBar SDK在我的iPhone应用程序中扫描条形码。我已成功实现了示例代码,但现在我想更改扫描器视图的框架(即:屏幕尺寸的一半)。我已尝试在viewDidLoad中设置阅读器视图的框架,但它会自行调整大小。 我知道这将是我错过的那些非常简单的事情之一,但任何帮助都会非常感激。干杯。

编辑:我得到了它的工作。这是我的代码:

ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
ZBarImageScanner *scanner = reader.scanner;
[reader setShowsZBarControls:NO];
[reader.readerView setScanCrop:(CGRect){ { 0, 0 }, { 0.43, 1 } }];
[reader.readerView start];
[self.view addSubview:reader.view];

overlayView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
[listTableView setFrame:CGRectMake(0, 208, 320, 208)];
[overlayView addSubview:listTableView];
[self.view addSubview:overlayView];

6 个答案:

答案 0 :(得分:7)

尝试使用ZBarReaderView,而不是使用ZBarReaderViewController。这对我有用,节省了我很多时间。希望它能帮到你。

ZBarReaderView*reader = [ZBarReaderView new];
ZBarImageScanner * scanner = [ZBarImageScanner new];
[scanner setSymbology: ZBAR_I25
               config: ZBAR_CFG_ENABLE
                   to: 0];
reader = [reader initWithImageScanner:scanner];
reader.readerDelegate = self;
reader.tracksSymbols = YES;
reader.frame = CGRectMake(20, 38, 283, 347);
reader.torchMode = 0;
dispatch_async(dispatch_get_main_queue(), ^{[reader start];});

[self.view addSubview:reader];

答案 1 :(得分:2)

我解决了这个问题。这就是我必须要做的事情:

  1. 将ZBarReaderViewController的视图添加为我自己视图的子视图(无论框架是什么,它都会烦人地填满整个视图)。
  2. 将ZBarReaderViewController的扫描尺寸更改为我想要的尺寸(请注意:设置此框架与设置正常框架不同,只是询问您是否需要帮助)。
  3. 将您想要显示的任何视图添加到ZBarReaderViewController的叠加视图中。
  4. 这非常困难且不直观,打破了Apple的许多代码设计指南,但最终仍然可行。

答案 2 :(得分:0)

您可以创建自己的视图和视图控制器,并将ZBarReaderViewController的视图添加为您自己视图的子视图;

答案 3 :(得分:0)

修改扫描视图控制器属性的另一种方法是导入ZBarSDK项目并自行编译和链接,而不是使用SDK的二进制版本。然后,您可以对您需要的视图控制器进行任何更改(请记住他们的许可证......应该首先阅读它)

答案 4 :(得分:0)

试试这个 它可能对你有所帮助:

ZBarReaderViewController *reader= [ZBarReaderViewController new];
reader.readerDelegate = self;
reader.supportedOrientationsMask = ZBarOrientationMaskAll;

ZBarImageScanner *scanner = reader.scanner;
// TODO: (optional) additional reader configuration here

//    reader.showsCameraControls = NO;  // for UIImagePickerController
reader.showsZBarControls = NO;

// EXAMPLE: disable rarely used I2/5 to improve performance
[scanner setSymbology:ZBAR_I25|ZBAR_QRCODE
               config: ZBAR_CFG_ENABLE
                   to: 0];
[reader viewDidLoad];
[reader viewWillAppear:NO];
[reader viewDidAppear:NO];

[self.viewScan addSubview:reader.view];

此处,self.viewScan是您当前控制器的任何视图。

现在扫描区域self.viewScan查看。

答案 5 :(得分:0)

最好的方法是将它放在sampleView中:

UIView *view = [self sampleView];
CALayer *viewLayer = [view layer];
[viewLayer setMasksToBounds:YES];
CGRect bounds = [view bounds];
[reader.view.layer setFrame:bounds];
[viewLayer insertSublayer:reader.view.layer below:[[viewLayer sublayers] objectAtIndex:0]];