二維碼ZXing環境的集成及使用 IOS


1.準備工作(下載庫文件)

1.1下載zxing最新的庫,下載地址

1.2 再次聲明一下,不要用模擬器去做測試了。既然是二維碼的使用,那就會用到攝像頭,所以要用真機來測試
2.裁剪文件

它支持衆多的條碼格式(對於IOS的只能支持二維碼,ZXING相對於JAVA支持較好),而且有各種語言的實現版本,它支持的語言包括:Java, C++, C#, Objective-C, ActionScript和Ruby。不是所有的文件我們都用的到,下載zxing後,解壓得到zxing文件夾,裏面只保留 cpp 和 iphone 兩個文件夾就可以了。(裁剪好後,請先運行該項目,進行編譯,如果成功,再進行下一步驟的添加工作)






3.將裁剪好的ZXING文件導入工程中
3.1 :拷貝裁剪好的zxing文件到你的項目根目錄下面

3.2:打開你的項目,新建GROUP命名爲"Dependencies"。

3.3:右擊"Dependencies"選擇“Add files to...”,在彈出的框中,找到:你的項目文件夾/zxing/iphone/ZXingWidget下面,選擇"ZXingWidget.xcodeproj",並確保"拷貝到項目文件夾中"不被選中。這樣的話,只是對其的一個引用,然後點添加。項目結構如下圖:



 3.4:建立自己的項目同ZXING的依賴關係

選擇你的項目--TARGETS--Build Phases--Target Dependencies--然後點擊"+"添加“ZXingWidget”。添加後如下圖:



3.5:添加相關的frameWorks類庫

選擇你的項目--TARGETS--Build Phases--Link Binary With Library--然後點擊"+"添加以下frameWorks:

libZXingWidget.a

AddressBook
AddressBookUI
AudioToolbox
AVFoundation
CoreMedia
CoreVideo
libiconv.dylib

完成後如下圖:




3.5:設置 搜索頭文件

選擇你的項目--TARGETS--Build Settings--搜索"header search paths"--雙擊"Header Search Paths"

./zxing/iphone/ZXingWidget/Classes
./zxing/cpp/core/src
添加頭文件搜索路徑:如圖,
注意
./zxing/iphone/ZXingWidget/Classes 設置爲recurisive
目錄:因爲裁剪後zxing文件直接放到項目的根目錄裏,因此兩個都可以./” 表示當前目錄../” 表示根目錄

3.6:設置 項目的編譯器 Apple LLVM compiler 4.1 - language因爲裏面是含有C++的代碼,用C的編譯器去編譯C++的代碼,它會找不到相關的類,所以要設置下C++的編譯器,如果不設置這項的話,會出現大量文件找不到的錯誤
選擇你的項目--TARGETS--Build Settings--搜索"Apple LLVM compiler"
c Language Dialect、
c++ Language Dialect、
c++ standard Library



至此ZXING的環境集成完成,接下來是向項目中引用ZXING

----------------------------------------------------------------------


4.在項目中引用ZXING文件

這一步會經常出現一些文件找不到等問題

首先請做如下操作:

4.1 由於混編,需要改部分文件的.m爲.mm,需要注意的是,如果不做更改,可能會引發:XXX file not found的問題。

1.請更改你的delegate文件的.m文件爲.mm (請注意,如果你在項目中重命名,並不會使物理路徑中的文件名被更改,所以請更改物理文件名)

MyZxingAppDelegate.m 

 

>>>>

   

MyZxingAppDelegate.mm

2.請更改你要使用zxing的項目文件的.m文件爲.mm

MyZxingViewController.m 

 

>>>>

   

MyZxing

   

ViewController

  .mm


4.2 頭文件引入

MyZxingViewController 文件夾中引用

  1.   
  2.   某文件.h
  3. #import <UIKit/UIKit.h>  
  4. #import <ZXingWidgetController.h>  //注意是<>  (" <> "代表是庫文件 " “” "代表自己寫的文件)
  5.  
  6. @interface Contact : UIViewController <ZXingDelegate>{  
  7.     UITextView *resultsView;  
  8.     NSString *resultsToDisplay;  
  9. }  
  10. @property (retain, nonatomic) IBOutlet UITextView *resultsView;  
  11. @property (nonatomic, copy) NSString *resultsToDisplay;  
  12.   
  13. - (IBAction)scanPressed:(id)sender;  
  14.   
  15. @end  

.mm

  1.  某文件.mm
  2. //.mm中纔可以引用  
  3. #import <QRCodeReader.h> //這個引用在.h文件中會出錯:應該在.mm文件裏引入,否則會有“iostream file not found”的錯誤
  4.  
  5. @implementation Contact  
  6. @synthesize resultsView;  
  7. @synthesize resultsToDisplay;  
  8.   
  9. //正常掃描退出事件  
  10. - (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result {  
  11.     self.resultsToDisplay = result;  
  12.     if (self.isViewLoaded) {  
  13.         [resultsView setText:resultsToDisplay];  
  14.         [resultsView setNeedsDisplay];  
  15.     }  
  16.     [self dismissModalViewControllerAnimated:NO];   
  17. }  
  18.   
  19. //掃描界面退出按鈕事件  
  20. - (void)zxingControllerDidCancel:(ZXingWidgetController*)controller {  
  21.     [self dismissModalViewControllerAnimated:YES];  
  22. }  
  23.   
  24. - (void) viewDidLoad  
  25. {  
  26.     [super viewDidLoad];  
  27.     [resultsView setText:resultsToDisplay];  
  28. }  
  29. //掃描按鈕事件  
  30. - (IBAction)scanPressed:(id)sender   
  31. {  
  32.     ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];  
  33.     QRCodeReader *qrcodeReader = [[QRCodeReader alloc] init];  
  34.     NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];  
  35.     [qrcodeReader release];  
  36.     widController.readers = readers;  
  37.     [readers release];  
  38.     NSBundle *mainBundle = [NSBundle mainBundle];  
  39.     //aiff  
  40.     widController.soundToPlay =[NSURL fileURLWithPath:[mainBundle pathForResource:@"beep-beep" ofType:@"caf"] isDirectory:NO];  
  41.     [self presentModalViewController:widController animated:YES];  
  42.     [widController release];  
  43. }  
  44.   
  45. - (void)viewDidUnload {  
  46.     self.resultsView = nil;  
  47. }  
  48.   
  49. - (void)dealloc {  
  50.     [resultsView release];  
  51.     [resultsToDisplay release];  
  52.     [super dealloc];  
  53. }  
  54. - (void)didReceiveMemoryWarning {  
  55.     [super didReceiveMemoryWarning];  
  56. }  
  57.   
  58. @end  
發佈了92 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章