为了方便下载挂一个百度盘链接,包含:
1.ZBarSDK .a文件(armv7 arm64和armv7 arm64 i386两种,如有其他需求请自行生成)
2.ZBarSDK
3.libqrencode
4.ZBar相机扫描 相册扫描 iOS原生相机扫描 和 libqrencode生成二维码示例程序
(一)二维码扫描之ZBarSDK的使用
1.1 生成.a文件
(1)打开ZBar-master/iphone/zbar.xcodeproj
(2)更改Architectures
(3)如果弹出警告,点change
关于armv7 armv7s arm64 i386 x86_64 Architextures Valid Architectures等介绍,请点这里
通过此链接文章可以得知,我这样设置后生成.a文件的真机指令集为 (armv7 armv7s arm64) ∩ (armv7 arm64) = armv7 arm64
(4)选择真机或iOS Device
command + B 编译,可以在左侧Products中看到libzbar.a为黑色
(5)选择任一模拟器
command + B 编译
(6)顶部导航栏,Product-Scheme-Edit Scheme-Run-Info-Build Configuration选择Release
重复(4)(5)操作
1.2 .a文件合并与选取
(1)选择生成的.a文件,Show in Finder
可以发现它的上一级有4个文件夹,每个文件夹中都有一个.a文件
从上到下依次是: 调试-真机 调试-模拟器 发布-真机 发布-模拟器
(2)打开终端,切换目录到当前文件夹
(3)通过命令lipo -info xxx.a,可以查看其支持的指令集
Debug和Release文件夹中得.a文件大小是不同的,这里我选择调试用Debug中的文件发布用Release中的文件
程序调试阶段将Debug-iphoneos/libzbar.a和Debug-iphonesimulator/libzbar.a合并,既可以在模拟器运行也可以真机调试
程序发布阶段,直接用Release-iphoneos/libzbar.a,只面向真机,比合并的文件要小
(4)上一步生成的.a文件和工程中ZBarSDK文件夹包含的头文件就是我们需要的东西了
1.3 使用
(1)先导入几个框架
(2)使用ZBarReaderController扫描
属性蛮多,可以按需求设置
1 ZBarReaderController *zbarVC = [[ZBarReaderController alloc] init]; 2 zbarVC.showsHelpOnFail = NO; 3 zbarVC.sourceType = UIImagePickerControllerSourceTypeCamera; 4 zbarVC.readerDelegate = self; 5 ZBarImageScanner *scanner = zbarVC.scanner; 6 //禁用很少使用的I2/5来改善性能 7 [scanner setSymbology: ZBAR_I25 config: ZBAR_CFG_ENABLE to: 0]; 8 [self presentViewController:zbarVC animated:YES completion:nil];
代理方法中取到二维码信息
1 - (void) imagePickerController: (UIImagePickerController*) reader 2 didFinishPickingMediaWithInfo: (NSDictionary*) info 3 { 4 id<NSFastEnumeration> results = 5 [info objectForKey: ZBarReaderControllerResults]; 6 ZBarSymbol *symbol = nil; 7 for(symbol in results) 8 break; 9 [self dismissViewControllerAnimated:YES completion:nil]; 10 self.displayLabel.text = symbol.data; 11 }
(3)使用ZBarReaderView扫描,方法和上面基本相同
1 ZBarImageScanner *scanner = [[ZBarImageScanner alloc] init]; 2 [scanner setSymbology: ZBAR_I25 config: ZBAR_CFG_ENABLE to: 0]; 3 ZBarReaderView *readerView = [[ZBarReaderView alloc] initWithImageScanner: scanner]; 4 readerView.frame = CGRectMake(x, y, w, h); 5 readerView.readerDelegate = self; 6 self.readerView = readerView; 7 [self.view addSubview:readerView];
代理方法
1 - (void) readerView: (ZBarReaderView*) readerView didReadSymbols: (ZBarSymbolSet*) symbols fromImage: (UIImage*) image{ 2 NSString *data; 3 for (ZBarSymbol *sym in symbols) { 4 data = sym.data; 5 break; 6 } 7 _myBlock(data); 8 [self dismissViewControllerAnimated:YES completion:nil];
(二)二维码扫描之iOS原生方法
挺长的,不贴了,见顶部示例程序
小插曲: 刚才测试时候用了一张形状不规则颜色片花哨的二维码,结果扫了半天也扫不上,用ZBar秒扫,最后换了一张普通的二维码一下就扫到了
(三)libqrencode生成二维码
非常简单,导入文件,一句代码就可以生成二维码
self.qrCodeImgView.image = [QRCodeGenerator qrImageForString:self.textField.text imageSize:self.qrCodeImgView.frame.size.width];
原文:http://www.cnblogs.com/lanchengyu/p/4371345.html