引言:
二维码的普及速度令人咋舌,现在随处的实体广告在边角处都附上一张二维码,提示用户扫描相关信息,了解更多,并且张小龙说,PC的入口在于搜索框,而手机的入口在于二维码.
因为二维码解决了手机输入信息的困难.除了感叹人类的聪明之外,更多的是如何利用这已有的技术去满足我们在应用上面的需求.
当然了,内部算法不在本博文的介绍范围内,主要介绍如何使用它.
参考资料:
1:开博来的第一篇文贴:zxing2.0二维码在xcode4.2中的使用
http://blog.csdn.net/icash/article/details/7727299
2:ios中使用zxing遇到的问题
http://blog.csdn.net/zzfsuiye/article/details/8244917
3:让ZXing 支持条形码扫描
http://hi.baidu.com/397362542/item/a574ce39b267fdd12f8ec23b
如何安装:
1:ZXingWidget的托管地址如下:
http://code.google.com/p/zxing/downloads/list
2:关于库里的一些文件
不是所有的文件我们都用的到,
下载zxing2.0后,解压得到zxing-2.0文件夹,里面只保留 cpp 和 iphone 两个文件夹就可以了。
3:我比较用WorkSpace(工作空间)的方式引入第三方资源
那么有一步骤可以省去:
4:frameWorks添加如下几项:libZXingWidget.a
AddressBook
AddressBookUI
AudioToolbox
AVFoundation
CoreMedia
CoreVideo
libiconv.dylib
完成后如下图:
5:不要忘记设置一个扫描成功时的音频文件:
widController.soundToPlay = [NSURL fileURLWithPath:[mainBundle pathForResource:@"beep-beep" ofType:@"aiff"] isDirectory:NO];
6:保持项目的C++混编译模式
首先请做如下操作:
1.请更改你的delegate文件的.m文件为.mm (请注意,如果你在项目中重命名,并不会使物理路径中的文件名被更改,所以请更改物理文件名)
MyZxingAppDelegate.m 改成
MyZxingAppDelegate.mm
2.请更改你要使用zxing的项目文件的.m文件为.mm
MyZxingViewController.m
改成
MyZxing
ViewController
.mm7:下载我的Demo 试试看:
XCode 4.6 iOS6.1 测试通过
Demo地址:猛击此处!
可能遇到的问题:
1.如果你项目中使用了zxing,但是在xcdoe升级到4.5以后出现Incompatible pointer types sending 'Class' (aka 'Class *') to parameter of type 'id<NSCopying>'错误,解决办法:重新下载更新版本的ZXing, 可以使用命令下载最新版本:svn checkout http://zxing.googlecode.com/svn/trunk/ zxing-read-only。
2.如果出现了问题Undefined symbols for architecture i386"std::string::c_str() const", referenced from。。。。,
将你项目中的Apple LLVM compiler 4.1 - language中的 c Language Dialect、c++ Language Dialect、c++ standard Library设置成下图所选的值。参考http://stackoverflow.com/questions/12665457/zxing-in-xcode-4-5-and-ios-6
3.编译成功往真机上装的时候出现Choose a destination with a supported architecture in order to run on this device ,由于ios设备不支持armv7s,所以必须将Architectures设置为armv6,但是仅仅需要改动valid architectures就行,不要改动architectures,否则容易引起真机不运行。把architectures改为$(ARCHS_STANDARD_32_BIT)就可以撞到手机上了。见http://blog.sina.com.cn/s/blog_90a0ad8d01013uuh.html
4:XCode 手贱升级到了 4.6 ZXingSDK 编译不过去了.
出现什么变量声明了没有使用的编译错误提示(可是明明使用了):
Member initializer 'bits_' does not name a non-static data member or base class
谷歌老外牛人多啊,或者说老外也遇到这个问题了,然后提问了,问答地址如下:
http://code.google.com/p/zxing/issues/detail?id=1494
里面说到将 ZXingWidget - BuildSettings - Other Warning Flags 里的 -Werror 和 -Wno-unused-parameter 去掉,
但其实只要去掉 -Werror 就可以了, 如果 -Wno-unused-parameter 这个也去掉了会产生很多变量没有使用的警告.
此时可以编译通过了,烦恼的是 也有少许警告.
2014-02-18 16:03:17
番外篇ZXingObjC:
ZXingObjC通过名字即可知道它是干什么的,它是二维码扫描开源方面的又一力作,代码采用纯Objective-C实现,内存管理使用ARC,并且作者依旧在持续更新,那么在稳定和代码结构方面应该是优易于ZXing原本的实现.相比ZXing的使用和部署,ZXingObjC就简单很多,最关键的是,它还支持CocoaPods.那么安装起来就非常非常简单了.接下来一起来看看如何使用它.
如何安装:
ZXingObjC通过CocoaPods即可快速安装.
如何使用: