ZBar 二維碼掃描(自定義區域掃描)

 

ZBar 二維碼掃描

 773人閱讀 評論(0) 收藏 舉報
   最近在做的項目中需要用到二維碼掃描功能,之前在使用過ZXing識別二維碼,ZXing也有對應的iOS版本,經過了解,ZBar也是一個常用的二維碼識別軟件,並分別提供了iOS和Android的SDK可供使用,最終我選擇了ZBar進行二維碼識別,它的註釋清晰,便於使用。

ZBar爲我們提供了兩種使用方式,一種是直接調用ZBar提供的ZBarReaderViewController打開一個掃描界面,另一種方式是使用ZBar提供的可以嵌在其他視圖中的ZBarReaderView,實際項目中我們更可能會使用第二種方式,這可以讓我們對界面做更多的定製。

ZBar使用起來也非常簡單,將ZBarSDK導入項目,在需要使用ZBar的文件中導入ZBarSDK.h頭文件即可,以下是ZBarReaderView的初始化方法:

[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.     _readerView = [[ZBarReaderView alloc] init];  
  5.     _readerView.frame = CGRectMake(064self.view.frame.size.widthself.view.frame.size.height - 64);  
  6.       
  7.     _readerView.layer.cornerRadius = 8.0f;  
  8.     _readerView.layer.borderWidth1.0f;  
  9.     _readerView.layer.borderColor = [[UIColor blueColor] CGColor];  
  10.       
  11.     _readerView.readerDelegate = self;  
  12.     //關閉閃光燈  
  13.     _readerView.torchMode = 0;  
  14.       
  15.     //掃描區域  
  16.     CGRect scanMaskRect = CGRectMake(6060200200);  
  17.       
  18.     if (TARGET_IPHONE_SIMULATOR) {  
  19.         ZBarCameraSimulator *cameraSimulator = [[ZBarCameraSimulator alloc] initWithViewController:self];  
  20.         cameraSimulator.readerView = _readerView;  
  21.     }  
  22.     [self.view addSubview:_readerView];  
  23.   
  24.     //掃描區域計算  
  25.     _readerView.scanCrop = [self getScanCropWithScanRect:scanMaskRect andReaderViewBounds:_readerView.bounds];  
  26.       
  27.     [_readerView start];  
  28. }  

以上代碼需要說明的有以下幾點:
掃描區域計算
這點比較重要,我們常用的二維碼掃描軟件的有效掃描區域一般都是中央區域,其他部分是不進行掃描的,ZBar可以通過ZBarReaderView的scanCrop屬性設置掃描區域,它的默認值是CGRect(0, 0, 1, 1),表示整個ZBarReaderView區域都是有效的掃描區域。我們需要把掃描區域座標計算爲對應的百度分數座標,也就是以上代碼中調用的getScanCrop:readerViewBounds方法,親測沒有問題,如下所示:
[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. - (CGRect)getScanCropWithScanRect:(CGRect)rect andReaderViewBounds:(CGRect)rvBounds  
  2. {  
  3.     CGFloat x,y,width,height;  
  4.       
  5.     x = rect.origin.y / rvBounds.size.height;  
  6.     y = 1 - (rect.origin.x + rect.size.width) / rvBounds.size.width;  
  7.     width = rect.size.height / rvBounds.size.height;  
  8.     height = rect.size.width / rvBounds.size.width;  
  9.       
  10.     return CGRectMake(x, y, width, height);  
  11.       
  12. }  

初始化部分完成之後,就可以調用ZBarReaderView的start方法開始掃描了,需要讓你的類實現ZBarReaderViewDelegate協議,在掃描到二維碼時會調用delegate的對應方法。最後,當二維碼已經識別時候,可以調用ZBarReaderView的stop方法停止掃描。如下所示:

  1. - (void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image
  2. {
  3.     for (ZBarSymbol *symbol in symbols) {
  4.         NSLog(@"%@", symbol.data);
  5.         break;
  6.     }

  7.     [self.readerView stop];
  8. }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章