2011-11-03 13 views
4

我使用Zbar SDK,並希望掃描QR碼和條形碼在我的定義框架中,但它在屏幕的任何部分掃描不在我定義的框架中,所以我犯了錯誤? 我想在我定義的框架中像這樣掃描。
http://www.visionsmarts.com/products/VSBarcodeReader/VSBarcodeReader.html如何在zbar SDK中設置掃描框架?

這是我的代碼。

-(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:@"[email protected]"]; 
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]; 
+0

我有一個問題@Furqi,你的黑色screen.png看起來像什麼偶然? – Alioo

回答

4

製作一個UIVIew(例如scanView)對象並將其作爲您的自定義區域。如果你想獲得掃描區域,應該有透明區域或圖像透明切割。

使用本

reader.cameraOverlayView = scanView; 

而且禁用除肖像模式下,所有的模式。

reader.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationPortrait); 

Full,代碼

在MyScanCode.h文件

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

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

} 
+0

可以使用ipad顯示如何在風景方向上完成這項工作嗎? – hacker

+0

reader.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationPortrait || UIInterfaceOrientationLandscapeLeft); 並根據視圖和代碼改變方向到viewController裏,當你展示這個ZBar時 – dayitv89

+0

我沒有得到完整的layout.the屏幕只有一半切割兩邊和波紋管?我該如何解決那? – hacker

2

而不是使用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, 126-88, 283, 347); 
reader.torchMode = 0; 
dispatch_async(dispatch_get_main_queue(), ^{[reader start];}); 

[self.view addSubview:reader];