使用ZBar来读取条形码和二维码的方法

1.使用ZBar项目。下载地址是:http://zbar.sourceforge.net/iphone/index.html


2.新建一个项目。

3.导入 ZBar的sdk。把ZBar SDK的目录拉入项目,然后选中copy选项

4.在项目文件的target中加入 以下framework
使用ZBar来读取条形码和二维码的方法

5.在appDelegate文件中加入 标记部分的代码

  1. -(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions
  2. {
  3. self.window=[[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease];
  4. //Overridepointforcustomizationafterapplicationlaunch.
  5. self.viewController=[[[ViewControlleralloc]initWithNibName:@"ViewController"bundle:nil]autorelease];
  6. self.window.rootViewController=self.viewController;
  7. [self.windowmakeKeyAndVisible];
  8. //forceviewclasstoloadsoitmaybereferenceddirectlyfromNIB
  9. [ZBarReaderViewclass];
  10. returnYES;
  11. }

注意此代码:

  1. //forceviewclasstoloadsoitmaybereferenceddirectlyfromNIB
  2. [ZBarReaderViewclass];


6.在.h文件中加入 ZBarReaderViewDelegate的实现,代码如下:
  1. //
  2. //ViewController.h
  3. //FootSafety
  4. //
  5. //Createdby泽宇徐on12-6-12.
  6. //Copyright(c)2012年__MyCompanyName__.Allrightsreserved.
  7. //
  8. #import<UIKit/UIKit.h>
  9. #import"ZBarSDK.h"
  10. @interfaceViewController:UIViewController<ZBarReaderViewDelegate>
  11. {
  12. IBOutletUILabel*label;
  13. ZBarReaderView*readerView;
  14. ZBarCameraSimulator*cameraSim;
  15. }
  16. @property(nonatomic,retain)UILabel*label;
  17. @property(nonatomic,retain)IBOutletZBarReaderView*readerView;
  18. @end

7.在.m文件中要实现的主要方法是:

  1. -(void)readerView:(ZBarReaderView*)view
  2. didReadSymbols:(ZBarSymbolSet*)syms
  3. fromImage:(UIImage*)img
  4. {
  5. //dosomethingusefulwithresults
  6. for(ZBarSymbol*syminsyms){
  7. self.label.text=sym.data;
  8. break;
  9. }
  10. }

这里是功能是读取照片信息,把条码放如label显示


  1. -(void)viewDidAppear:(BOOL)animated
  2. {
  3. //runthereaderwhentheviewisvisible
  4. [readerViewstart];
  5. }

这个是在显示视图的时候,启动摄像头,开始扫描


  1. -(void)viewDidLoad
  2. {
  3. [superviewDidLoad];
  4. //Doanyadditionalsetupafterloadingtheview,typicallyfromanib.
  5. //thedelegatereceivesdecoderesults
  6. readerView.readerDelegate=self;
  7. //youcanusethistosupportthesimulator
  8. if(TARGET_IPHONE_SIMULATOR){
  9. cameraSim=[[ZBarCameraSimulatoralloc]
  10. initWithViewController:self];
  11. cameraSim.readerView=readerView;
  12. }
  13. }

在初始化的时候,设置托管。


.m文件所有内容是:

  1. //
  2. //ViewController.m
  3. //FootSafety
  4. //
  5. //Createdby泽宇徐on12-6-12.
  6. //Copyright(c)2012年__MyCompanyName__.Allrightsreserved.
  7. //
  8. #import"ViewController.h"
  9. @interfaceViewController()
  10. @end
  11. @implementationViewController
  12. @synthesizelabel;
  13. @synthesizereaderView;
  14. -(void)viewDidLoad
  15. {
  16. [superviewDidLoad];
  17. //Doanyadditionalsetupafterloadingtheview,typicallyfromanib.
  18. //thedelegatereceivesdecoderesults
  19. readerView.readerDelegate=self;
  20. //youcanusethistosupportthesimulator
  21. if(TARGET_IPHONE_SIMULATOR){
  22. cameraSim=[[ZBarCameraSimulatoralloc]
  23. initWithViewController:self];
  24. cameraSim.readerView=readerView;
  25. }
  26. }
  27. -(void)viewDidAppear:(BOOL)animated
  28. {
  29. //runthereaderwhentheviewisvisible
  30. [readerViewstart];
  31. }
  32. -(void)readerView:(ZBarReaderView*)view
  33. didReadSymbols:(ZBarSymbolSet*)syms
  34. fromImage:(UIImage*)img
  35. {
  36. //dosomethingusefulwithresults
  37. for(ZBarSymbol*syminsyms){
  38. self.label.text=sym.data;
  39. break;
  40. }
  41. }
  42. -(void)viewDidUnload
  43. {
  44. [superviewDidUnload];
  45. //Releaseanyretainedsubviewsofthemainview.
  46. }
  47. -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
  48. {
  49. return(interfaceOrientation!=UIInterfaceOrientationPortraitUpsideDown);
  50. }
  51. -(void)dealloc
  52. {
  53. [self.readerViewrelease];
  54. [self.labelrelease];
  55. [superdealloc];
  56. }
  57. @end

在ViewController.xib文件中 增加一个view,并且修改view的类是ZBarReaderView ,并且指向 .h文件中定义的
  1. ZBarReaderView*readerView;