How to set scan frame in zbar SDK?

I use the Zbar SDK and I want to scan the QR code and barcode in my definition frame, but it scans in any part of the screen not in my specific frame, so when do I make a mistake? I want to perform a scan like this in my specific frame.
http://www.visionsmarts.com/products/VSBarcodeReader/VSBarcodeReader.html

here is my code.

-(void)displayMe{ ZBarReaderViewController *reader = [ZBarReaderViewController new]; reader.readerDelegate = self; reader.showsZBarControls=NO; //////////////black area///////////////////////// UIImage *image1 = [UIImage imageNamed:@"blackscreen.png"]; UIImageView *imageLogo1 = [[UIImageView alloc] initWithImage:image1]; imageLogo1.frame = CGRectMake(0, 0, 320, 480); cancelLabel =[[UILabel alloc]initWithFrame:CGRectMake(0,420, 320, 60)]; cancelLabel.backgroundColor = [UIColor blackColor]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setFrame:CGRectMake(100,420, 100, 60)]; [btn setTitle:@"Cancel" forState:UIControlStateNormal]; btn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:18]; btn.backgroundColor=[UIColor blackColor]; [btn addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside]; [cancelLabel bringSubviewToFront:btn]; [imageLogo1 addSubview:cancelLabel]; [imageLogo1 setUserInteractionEnabled:YES]; [imageLogo1 addSubview:btn]; //reader.cameraOverlayView = btn; ///////////////line///////////////////////////// UIImage *image = [UIImage imageNamed:@" ScannerKitLaser@2x.png "]; UIImageView *imageLogo = [[UIImageView alloc] initWithImage:image]; imageLogo.frame = CGRectMake(40, 240, 230, 10); [imageLogo1 addSubview:imageLogo]; ///////////////Configure reader/////////////////////////////// reader.cameraOverlayView = imageLogo1; //reader.cameraOverlayView.frame=CGRectMake(40, 240, 230, 30); //imageLogo.frame = CGRectMake(0, 0, image.size.width, image.size.height); //imageLogo.center = CGRectMake(320/2, 460/2, image.size.width, image.size.height); ZBarImageScanner *scanner = reader.scanner; [scanner setSymbology: ZBAR_I25 config: ZBAR_CFG_ENABLE to: 1]; ZBarCaptureReader *cap=[[ZBarCaptureReader alloc]init]; //cap.scanCrop=CGRectMake(300, 400, 230, 200); cap.scanCrop=CGRectMake(100, 160, 50,60); //cap.cameraOverlayView.frame=CGRectMake(40, 240, 230, 30); [self presentModalViewController: reader animated: YES]; [reader release]; 
+4
source share
2 answers

Create a UIVIew object (for example, scanView) and make it as a customization area. If you want to get a scan area, there should be a transparent area or a transparent section of the image.

use this

 reader.cameraOverlayView = scanView; 

Also turn off all modes except Portrait mode.

 reader.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationPortrait); 

Full, for example. code

In the file MyScanCode.h

 {ZBarReaderViewController *reader;} @property (nonatomic, strong) IBOutlet UIView *scanView; 

In the file MyScanCode.m

 - (void) readCode{ reader = [ZBarReaderViewController new]; reader.readerDelegate = self; reader.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationPortrait); #if !(TARGET_IPHONE_SIMULATOR) reader.cameraOverlayView = scanView; reader.showsZBarControls = NO; #endif reader.wantsFullScreenLayout = NO; ZBarImageScanner *scanner = reader.scanner; [scanner setSymbology:ZBAR_I25 config: ZBAR_CFG_ENABLE to: 0]; [self presentModalViewController:reader animated:NO]; } 
+4
source

Instead of using ZBarReaderViewController, try using ZBarReaderView. It worked for me and saved a lot of time. Hope this helps you.

 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, 126-88, 283, 347); reader.torchMode = 0; dispatch_async(dispatch_get_main_queue(), ^{[reader start];}); [self.view addSubview:reader]; 
+2
source

Source: https://habr.com/ru/post/1379433/


All Articles