二维码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  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值