iOS扫描二维码的实现

iOS设备上二维码扫描与生成功能实现
本文详细介绍了如何在iOS设备上使用二维码进行扫描(解码)和生成(编码),包括使用开源库ZBarSDK和QREncoder实现二维码扫码功能,并提供了具体的代码示例。同时,还介绍了如何在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 就可以 了

转载于:https://www.cnblogs.com/yuanfang-ma/p/4835676.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值