原帖地址:http://yul100887.blog.163.com/blog/static/20033613520121020611299/

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

下面介绍一下如何在苹果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)scanBtnPressed:(id)sender{

// ADD: present a barcode reader that scans from the camera feed

ZBarReaderViewController *reader = [[ZBarReaderViewController alloc]init];

reader.readerDelegate = self;

reader.supportedOrientationsMask = ZBarOrientationMaskAll;

ZBarImageScanner *scanner = reader.scanner;

// TODO: (optional) additional reader configuration here

// EXAMPLE: disable rarely used I2/5 to improve performance

[scanner setSymbology: ZBAR_I25

config: ZBAR_CFG_ENABLE

to: 0];

// present and release the controller

[self presentModalViewController: reader

animated: YES];

[reader release];

}

回调在 - (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. // EXAMPLE: do something useful with the barcode data
  7. 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/"];

IOS开发 二维码功能的实现的更多相关文章

  1. iOS开发-二维码扫描和应用跳转

    iOS开发-二维码扫描和应用跳转   序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...

  2. iOS开发-二维码的基本使用

    二维码在生活中出现的频率越来越多了,大街小巷各个角落,它的出现更大的作用是代替功能单一的传统条形码,但是通常很多人第一次见到这个都不清楚这是干嘛用的.最初第一次见到可能就是买到的商品上有一个数字的条形 ...

  3. iOS开发 - 二维码的生成与读取

    二维码的生成 从iOS7開始集成了二维码的生成和读取功能 此前被广泛使用的zbarsdk眼下不支持64位处理器 生成二维码的步骤: 导入CoreImage框架 通过滤镜CIFilter生成二维码 二维 ...

  4. iOS开发 二维码生成

    基于libqrencode的二维码生成 + (void)drawQRCode:(QRcode *)code context:(CGContextRef)ctx size:(CGFloat)size { ...

  5. iOS开发--二维码的扫描

    一.需要包含头文件 #import <AVFoundation/AVFoundation.h> 二.通过设置<AVCaptureMetadataOutputObjectsDelega ...

  6. iOS开发--二维码的生成

    一.需要包含头文件 #import <CoreImage/CoreImage.h> 二.示例代码 -- 以下生成的二维码不够清晰 如图: - (void)touchesBegan:(NSS ...

  7. iOS开发——高级技术&二维码功能的实现

    二维码功能的实现 ZBarSDK,一个比较优秀的开源项目,使用起来也很简单. ZBarSDK是一个开源的SDK,可从这里下载到源码,该SDK实现了识别和读取各种条形码,包括EAN-13/UPC-A, ...

  8. SNF开发平台WinForm-平板拍照及扫描二维码功能

    在我们做项目的时候,经常会有移动平板处理检验,审核等,方便移动办公.这时就需要在现场拍照上传问题,把当场问题进行上传,也有已经拍完照的图片或加工过的图片进行上传.还有在车间现场一体机,工控机 这种产物 ...

  9. iOS--iOS7摄像头识别二维码功能

    iOS–iOS7摄像头识别二维码功能 属性介绍: AVFoundation 框架基于以下几个类实现图像捕捉 ,通过这些类可以访问来自相机设备的原始数据并控制它的组件. AVCaptureDevice ...

随机推荐

  1. docker系列之安装配置

    由于docker支持内核3.8以上的,所以我们要安装centos7系统,这个系统的内核是3.10,来支持docker使用环境 一.用UItralSo制作u盘启动 打开找到要做u盘启动的镜像 二.安装C ...

  2. ACM训练联盟周赛 G. Teemo's convex polygon

    65536K   Teemo is very interested in convex polygon. There is a convex n-sides polygon, and Teemo co ...

  3. jmx_exportter+prometheus+grafana监控hadoop

    0.介绍(摘录自https://www.hi-linux.com/posts/25047.html) 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和 ...

  4. 【RAID】raid1 raid2 raid5 raid6 raid10的优缺点和做各自raid需要几块硬盘

    Raid 0:一块硬盘或者以上就可做raid0优势:数据读取写入最快,最大优势提高硬盘容量,比如3快80G的硬盘做raid0 可用总容量为240G.速度是一样.缺点:无冗余能力,一块硬盘损坏,数据全无 ...

  5. 爬虫开发python工具包介绍 (3)

    本文来自网易云社区 作者:王涛         :arg str url: URL to fetch         :arg str method: HTTP method, e.g. " ...

  6. 通过日志动态查看正在执行的mysql语句

    通过日志动态查看正在执行的mysql语句 :tail -f /tmp/general_log.log

  7. hdu2087

    #include <stdio.h> #include <string.h> int main(){ int cnt,i,j,k; +],tmp[+]; int strl,tm ...

  8. Nginx+Php中限制站点目录防止跨站的配置方案记录

    Nginx+Php中限制站点目录防止跨站的配置方案记录(使用open_basedir)-------------------方法1)在Nginx配置文件中加入: 1 fastcgi_param  PH ...

  9. 【bzoj4197】[Noi2015]寿司晚宴 分解质因数+状态压缩dp

    题目描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同的寿司,编号 ...

  10. 【Luogu】P1312Mayan游戏(暴搜)

    题目链接 由于是暴搜题,所以这篇博客只讲怎么优化剪枝,以及一些细节. 模拟消除思路:因为消除可以拆分成小的横条或竖条,而这些条的长度至少为三,所以一块可消除的区域至少会有一个中心点.这里的中心点可以不 ...