iOS扫描二维码的实现

如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影。而手机等移动设备又成为二维码的一个很好的应用平台,不管是生成二维码还是扫码二维码。

下面介绍一下如何在苹果iOS设备上使用二维码:


1. 扫描二维码(解码)
扫描二维码的开源库有很多如 ZBar、ZXing等。在此以ZBar作为例子构建二维码扫码应用。
首先在github上下载ZBar SDK
地址https://github.com/bmorton/ZBarSDK
打开压缩包,其中有ZBarSDK 文件夹
将ZBarSDK 文件夹包含到项目中来
(Finder)
(XCode)
其中包含一个libzbar.a的静态库
接着往项目中添加Framework框架及链接库(动态库、静态库)。在项目属性TARGETSSummary 中找到Linked Frameworks and Libraries
添加
AVFoundation.framwork, CoreMedia.framework, CoreVideo.framework, libiconv.dylib 和libzbar.a (如图)



然后在使用的地方引入头文件
#import "ZBarSDK.h"
调用ZBar的类必须实现ZBarReaderDelegate协议
如:UIViewController <ZBarReaderDelegate>
在- (void) imagePickerController: (UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
最后在协议方法中通过info获取结果值

  1. id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];  
  2. ZBarSymbol *symbol = nil;  
  3. for(symbol in results)  
  4. // EXAMPLE: just grab the first barcode   
  5. break;  
  6.   
  7. // EXAMPLE: do something useful with the barcode data   
  8. resultText.text = symbol.data;  
  1. id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];  
  2. ZBarSymbol *symbol = nil;  
  3. for(symbol in results)  
  4. // EXAMPLE: just grab the first barcode  
  5. break;  
  6.   
  7. // EXAMPLE: do something useful with the barcode data  
  8. resultText.text = symbol.data;  


文档地址http://zbar.sourceforge.net/iphone/sdkdoc/
二维码开源库ZXing的加载过程与此类似,但是ZXing默认并不支持一维码的扫描,而ZBar是支持的。

2. 生成二维码(编码)
在生成二维码的库中QREncoder 比较好用。ZXing库的android版本是带java版的编码库的但不知为何没有C++版的解码库,故在ios上也没法解码,如果应用中既要生成二维码又要扫描二维码就有可能要带两套不同的库。
首先同样是在github 上下载到SDK库
地址https://github.com/jverkoey/ObjQREncoder
解压后将源码库直接包含到项目中来(如图)



设置头文件路径,在TARGET中building settings  Search Path

当然也可以直接将库编译成静态库libQREcoder.a然后在包含进来

接着在Frameworks 中添加静态库的引用



然后在使用该库的地方包含头文件
#import <QREncoder/QREncoder.h>
注意:二维码显示的时候有可能会因为图像的大小而做调整,所以需要包含系统库QuartzCore.framework
最后就可以调用编码库了:

  1. UIImage* image = [QREncoder encode:@"http://www.baidu.com/"];  
    1. UIImage* image = [QREncoder encode:@"http://www.baidu.com/"];
    2. 本章将讲解如何实现二维码扫描的功能

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

      然后将如下的相关类库添加进去

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

      接下来首先在.h文件中引用

      #import "ZBarSDK.h"

      同时添加代理

      ZBarReaderDelegate

      然后在.m文件中添加如下代码

      复制代码
       1 -(void)sysbutbuttonclick{
       2     
       3     ZBarReaderViewController *reader = [ZBarReaderViewController new];
       4     reader.readerDelegate = self;
       5     ZBarImageScanner *scanner = reader.scanner;
       6     
       7     [scanner setSymbology: ZBAR_I25
       8                    config: ZBAR_CFG_ENABLE
       9                        to: 0];
      10     [self presentModalViewController: reader    animated: YES];
      11 }
      12 
      13 - (void) imagePickerController: (UIImagePickerController*) reader
      14  didFinishPickingMediaWithInfo: (NSDictionary*) info
      15 {
      16     
      17     NSLog(@"info=%@",info);
      18     // 得到条形码结果
      19     id<NSFastEnumeration> results =[info objectForKey: ZBarReaderControllerResults];
      20     ZBarSymbol *symbol = nil;
      21     for(symbol in results)
      22         // EXAMPLE: just grab the first barcode
      23         break;
      24     
      25     
      26     UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"信息提示!" message:symbol.data delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
      27     [alert show];
      28     // 将获得到条形码显示到我们的界面上
      29     // resultText.text = symbol.data;
      30     NSLog(@"%@",symbol.data);
      31     // 扫描时的图片显示到我们的界面上
      32     //  resultImage.image =
      33     // [info objectForKey: UIImagePickerControllerOriginalImage];
      34     
      35     // 扫描界面退出
      36     //[reader dismissModalViewControllerAnimated: YES];
      37 }
      复制代码

      然后需要触发扫描事件的时候 就调用

      sysbutbuttonclick 就可以 了

posted @ 2015-09-24 16:15  不是白兔不吃糖  阅读(281)  评论(0)    收藏  举报