6

Ok, so I'm using the ZBar SDK to scan barcodes in my iPhone app. I've successfully implemented the sample code, but now I want to change the frame of the scanner view (i.e: To half the screen size). I've tried setting the frame of the reader's view in viewDidLoad, but it resizes itself. I know this is going to be one of those really simple things I just missed, but any help would be much appreciated. Cheers.

EDIT: I got it to work. Here's my code:

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];
4

6 に答える 6

7

ZBarReaderViewController を使用する代わりに、ZBarReaderView を使用してみてください。これは私にとってはうまくいき、多くの時間を節約しました。お役に立てば幸いです。

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];
于 2014-03-13T11:22:46.073 に答える
2

私はそれを解決しました。これは私がしなければならなかったことです:

  1. ZBarReaderViewController のビューを自分のビューのサブビューとして追加します (フレームが何であってもビュー全体を煩わしく埋めます)。
  2. ZBarReaderViewController のスキャン サイズを任意のサイズに変更します (注意: このフレームの設定は、通常のフレームの設定とは異なります。サポートが必要な場合はお尋ねください)。
  3. 表示したいビューを ZBarReaderViewController のオーバーレイ ビューに追加します。

これは非常に難しく直感的ではなく、Apple のコード設計ガイドラインの多くを破っていましたが、最終的にはまだ実行可能です。

于 2011-07-11T01:55:46.277 に答える
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]];
于 2013-03-20T19:35:47.090 に答える
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表示されます。

于 2013-01-02T07:12:03.970 に答える
0

独自のビューとビュー コントローラーを作成し、ZBarReaderViewController のビューを独自のビューのサブビューとして追加できます。

于 2011-07-07T07:24:46.700 に答える
0

スキャン ビュー コントローラーのプロパティを変更するもう 1 つの方法は、SDK のバイナリ バージョンを使用するのではなく、ZBarSDK プロジェクトをインポートして自分でコンパイルおよびリンクすることです。次に、必要な変更をView Controllerに加えることができます(ライセンスに注意してください...おそらく最初に読む必要があります)

于 2012-06-10T02:59:00.783 に答える