3

我有一个从情节提要创建的 ZBarReaderView,大小为 216x20 像素,显示为大约 230x50 像素,因为 ZBarReaderView 并没有把它的大小看得太严重......这一切都很好,但是当我在那个 readerView 上调用 start 时它的行为真的很奇怪. 它启动了凸轮,但可能在半秒后,readerView 会放大一点,并且 readerView 内的相机图片向下移动,然后再次向上移动。这并不可怕,但看起来有点糟糕。任何人都有任何想法可能导致这种情况以及如何解决它?也许 sdk 对扫描仪的准备情况有某种隐藏的回调,我可以隐藏它,直到扫描仪说它准备好了,然后在 0.5 秒后显示扫描仪......

barcodeReader 是 ZBarReaderView 的 iboutlet,scannerLoading 是 uiactivityindicatorview 的 iboutlet,它在扫描仪加载之前一直处于动画状态。这些是唯一从默认更改的设置,当然故事板中设置的框架除外。

[barcodeReader setReaderDelegate:self];
[barcodeReader setAllowsPinchZoom:false];
[barcodeReader start];

/* this works because [barcodeReader start] blocks ui updates until the scanner
   is running, i know it's not a good solution but since there doesn't seem to 
   be a callback or delegate method like scannerDidStart or something it seems 
   to be the only way... */
[scannerLoading stopAnimating]; 

谢谢你的帮助!

4

2 回答 2

3

我刚刚发布了一个报复性问题的答案:

ZBarReadview 具有来自 StoryBoard 的自定义大小,但是当它被调用时,它的大小不是我设置的

也许答案也解决了你的问题。

简而言之:

当使用 Interface Builder 或 Storyboard 创建视图并将 ZBarReaderView 分配给它时,您必须在相机图像的属性中选中“剪辑子视图”以保持视图的大小。

于 2012-10-23T14:09:52.623 回答
0

只需添加另一个视图以使其成为cameraoverlayview,其中的图像视图具有所需的图像部分为透明的。然后在按钮操作中`

// ADD: 显示一个从摄像头扫描的条形码阅读器

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

reader.supportedOrientationsMask = ZBarOrientationMaskAll;

reader.sourceType=UIImagePickerControllerSourceTypeCamera;
//reader.cameraDevice = UIImagePickerControllerCameraDeviceFront;

reader.cameraOverlayView=cameraOverlay;

if( [UIImagePickerController isCameraDeviceAvailable:                         UIImagePickerControllerCameraDeviceFront ])
{
       reader.cameraDevice = UIImagePickerControllerCameraDeviceFront;
}
ZBarImageScanner *scanner = reader.scanner;

reader.wantsFullScreenLayout = YES;
// TODO: (optional) additional reader configuration here

// EXAMPLE: disable rarely used I2/5 to improve performance

[scanner setSymbology: ZBAR_I25
               config: ZBAR_CFG_ENABLE
                   to: 0];
 reader.showsZBarControls = NO; 
// present and release the controller

[自我presentModalViewController:阅读器动画:是];//[appdel.navigationController pushViewController:reader animated:YES];

//[reader.view addSubview:collect];


[reader release];add this and then also add 

`- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info { // ADD: 获取解码结果 id results = [info objectForKey: ZBarReaderControllerResults]; ZBarSymbol *symbol = nil; for(symbol in results) // 示例:只抓取第一个条形码中断;

 [self rewards:symbol.data];

} `

作为一种方法。希望这能解决您的问题

于 2012-06-22T12:23:57.017 回答