iOS端使用二維碼掃描(ZBarSDK)和產生(libqrencode)功能

來源:互聯網
上載者:User

標籤:

如今二維碼隨處可見,無論是實物商品還是各種禮券都少不了二維碼的身影。手機中二維碼使用也很廣泛,如等。正好最近收集總結了下二維碼的使用方法

下面介紹一下如何在iOS裝置上使用二維碼

首先在github上下載ZBar SDK
地址https://github.com/bmorton/ZBarSDK

然後將如下的相關類庫添加進去

AVFoundation.framwork, CoreMedia.framework, CoreVideo.framework, libiconv.dylib 和libzbar.a

接下來首先在.h檔案中引用

#import "ZBarSDK.h"

同時添加代理

ZBarReaderDelegate

 

1.掃描二維碼(包括讀取和解碼)

掃描二維碼的開源庫有很多如 ZBar、ZXing等。博主先嘗試了ZXing,豎屏的情況下ZXing沒有問題,但是似乎橫屏會出現錯位的情況。於是博主放棄ZXing,使用ZBar。

這裡要提一句,ZXing的開源做的比ZBar好,讀取和解碼速度也快,但是整合到自己的工程中是見痛苦的事情,不光是匯入整個Demo工程,設定也相對繁瑣,如果不是真的需要超高效能應用的開發人員,博主還是建議使用ZBar。

總的流程如下:

① 下載ZbarSDK,包含ZbarSDK標頭檔包、libzbar.a靜態連結庫檔案以及資源檔三部分;

② 在新工程中匯入以下架構:AVFoundation.framework、CoreMedia.framework、CoreVideo.framework、QuartzCore.framework、libiconv.dylib(已存在則不需要重新加入);

③ 將ZbarSDK加入工程;

 

 

④ 檢查libzbar.a連結庫是否正常,如果沒有自動連結,需要手動加入,如:

 

 

⑤ 在需要使用的頁面.h檔案中引用標頭檔#import "ZBarSDK.h"

⑥ 在需要使用的頁面.h中繼承 <ZBarReaderDelegate>協議 

⑦ 在.m中實現協議的方法- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info

  1. id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];  
  2.   ZBarSymbol *symbol = nil;  
  3.   for(symbol in results)  
  4.       break;      
  5.   [self dismissViewControllerAnimated:YES  
  6.                            completion:^{  
  7.                            }];  
  8. NSString *code = [NSString stringWithString:symbol.data];  

⑧ 實現開始掃描的按鈕功能

  1. ZBarReaderViewController *reader = [ZBarReaderViewController new];  
  2.   reader.readerDelegate = self;  
  3. reader.supportedOrientationsMask = ZBarOrientationMaskAll;  
  4.       
  5.   ZBarImageScanner *scanner = reader.scanner;  
  6.   [scanner setSymbology: ZBAR_I25  
  7.                  config: ZBAR_CFG_ENABLE  
  8.                      to: 0];  
  9.   [self presentViewController:reader  
  10.                      animated:YES  
  11.                    completion:^{  
  12.   }];  

 

 2.產生二維碼

在產生二維碼的庫中QREncoder最為常見,但是由於中文字元的特殊性,產生中文的時候會出現一定的錯誤,所以博主改用libqrencode,是一個純C編寫的類庫,支援面也更廣泛。

① 下載libqrencode源碼;

② 在新工程中匯入以下架構:AVFoundation.framework、CoreMedia.framework、CoreVideo.framework、QuartzCore.framework、libiconv.dylib(已存在則不需要重新加入);

③ 將libqrencode源碼加入工程;

④ 需要使用的頁面.m檔案中引用標頭檔#import "QRCodeGenerator.h";

⑤ 實現產生二維碼圖片的方法

  1. UIImage *image = [QRCodeGenerator qrImageForString:self.codeString imageSize:self.imageView_Code.bounds.size.width];  

3.自訂掃描頁

ZXing支援自己建立掃描頁面,而由於ZBar使用的.a的連結庫檔案,所以需要修改他產生的掃描頁,不能直接建立一個。

在上文中掃描二維碼第⑧項,對reader進行一些修改,代碼如下:

  1. for (UIView *temp in [reader.view subviews]) {  
  2.         for (UIToolbar *toolbar in [temp subviews]) {  
  3.             if ([toolbar isKindOfClass:[UIToolbar class]])  
  4.             {  
  5.                 UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismissOverlayView:)];  
  6.                   
  7.                 UIBarButtonItem *item2 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];  
  8.                   
  9.                 UIBarButtonItem *item3 = [[UIBarButtonItem alloc]initWithTitle:@"相簿" style:UIBarButtonItemStyleBordered target:self action:@selector(clickPhotoToolBarItem:)];  
  10.                 NSArray *array = [NSArray arrayWithObjects:item1,item2,item3,nil];  
  11.                   
  12.                 [toolbar setItems:array animated:YES];  
  13.             }  
  14.         }  
  15.     }    
上述代碼中,取消按鈕和相簿按鈕方法等需要自己定義。方法中詳細代碼如下:
  1. //取消按鈕方法  
  2. - (void)dismissOverlayView:(id)sender{  
  3.     [self dismissViewControllerAnimated:YES  
  4.                              completion:^{  
  5.     }];  
  6. }  
  7. // 選取相簿  
  8. -(void)clickPhotoToolBarItem:(id)sender  
  9. {  
  10.     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])  
  11.     {  
  12.         UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];  
  13.         imagePicker.delegate = self;  
  14.         imagePicker.allowsEditing = NO;  
  15.         imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;  
  16.           
  17.         [self dismissViewControllerAnimated:NO completion:^{}];  
  18.         [self presentViewController:imagePicker animated:YES completion:^{}];  
  19.     }  
  20. }  

iOS端使用二維碼掃描(ZBarSDK)和產生(libqrencode)功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.