IOS开发之ZBarReaderView的使用
IOS开发之ZBarReaderView的使用
HOMEABOUTGUESTBOOKCATEGORIESTAGSLINKSSUBSCRIBE
当开发IOS程序中需要用到二维码识别功能的时候,zbar这个开源库估计会被不少人选择。但是关于zbar的用法,网上的资料大部分都集中在ZBarReaderViewController这个类的使用上。本人在使用中,发现ZBarReaderViewController这 个类使用很不灵活,比如,如果需要对界面做一些自定义的定制时会变得很麻烦。在zbar的头文件中,我发现了ZBarReaderView这个类,直觉告 诉我这个类的使用应该是比较灵活。google之后发现针对这个类的使用说明比较少,几乎没有,只能自己动手了,在下载了zbar的源码稍作研究后,终于 搞定了ZBarReaderView的用法。
用法
ZBarReaderView是UIView的子类,所以我们可以将其当做一个view来设置大小并放置到我们自己界面的任何地方。初始化ZBarReaderView的代码如下:
ZBarReaderView *readview = [ZBarReaderView new]; // 初始化
readview.frame = CGRectMake(0, 0, 320, 460); // 改变frame
readview.readerDelegate = self; // 设置delegate
readview.allowsPinchZoom = NO; // 不使用Pinch手势变焦
[self.view addSubview:readview];
其中第四行的默认值是YES。使用ZBarReaderView的类要实现 ZBarReaderViewDelegate代理。
添加上述代码后,只是将ZBarReaderView添加到了我们的控制器视图中,摄像头并没有启动,readview也不会显示视频流。ZBarReaderView中有两个方法可以很方便的开启和关闭摄像头。
[readview start]; // 开始扫描
[readview stop]; // 停止扫描
你可以在需要的时候调用这两个方法来控制摄像头的开启和关闭。这样,如果摄像头在开启状态并且扫描到二维码或者条形码以后,ZBarReaderViewDelegate的以下代理函数就会被调用。并可以在其中做一些处理。
- (void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image{
// 得到扫描的条码内容
const zbar_symbol_t *symbol = zbar_symbol_set_first_symbol(symbols.zbarSymbolSet);
NSString *symbolStr = [NSString stringWithUTF8String: zbar_symbol_get_data(symbol)];
if (zbar_symbol_get_type(symbol) == ZBAR_QRCODE) { // 是否QR二维码
}
}
你可能已经注意到ZBarReaderViewDelegate代理函数中的fromImage:(UIImage *)image这个参数了。没错,ZBarReaderView可以调用摄像头来完成拍照功能。你需要按以下方法调用。
[readview.captureReader captureFrame];
上述代码执行后,ZBarReaderViewDelegate的代理函数同样会被调用,其中的fromImage:(UIImage *)image就是方法调用时摄像头捕获的图像。
总结
我本身对zbar这个开源的库也没有做深入研究,只是在实际使用中总结了一些用法。有感于这方面的资料比较少,特此做一个总结。
IOS开发之ZBarReaderView的使用的更多相关文章
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- iOS开发之UISearchBar初探
iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...
- iOS开发之UIImage等比缩放
iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...
- iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用
iOS开发之 Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...
- iOS开发之loadView、viewDidLoad及viewDidUnload的关系
iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系 标题中所说的3个方 ...
- iOS开发之info.pist文件和.pch文件
iOS开发之info.pist文件和.pch文件 如果你是iOS开发初学者,不用过多的关注项目中各个文件的作用.因为iOS开发的学习路线起点不在这里,这些文件只会给你学习带来困扰. 打开一个项目,我们 ...
- iOS开发之WKWebView简单使用
iOS开发之WKWebView简单使用 iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...
- iOS 开发之Block
iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1. 按钮事件 target action 机制. 它是将一 ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
随机推荐
- Scala实战高手****第3课:在IDE下开发第一个Scala程序纯傻瓜式彻底透彻解析
- Git学习笔记(二) 远程仓库及分支
添加远程仓库(以GitHub为例) 所谓的远程仓库,其实就和本地仓库一样,只是我们本地电脑可能会关机什么的.远程仓库的目的就是保证7*24小时开启状态.GitHub是一个很好的公共Git远程仓库(后面 ...
- MariaDB数据库管理系统
MYSQL数据库管理系统被Oracle公司收购后从开源换向到了封闭,导致许多Linux发行版选择了MariaDB. MYSQL是一款大家都非常熟知的数据库管理系统,技术成熟.配置简单.开源免费并且 ...
- cdev结构体及其相关函数
一.在Linux2.6内核中一个字符设备用cdev结构来描述,其定义如下: struct cdev { struct kobject kobj; struct module *owner; //所属模 ...
- centos7 安装nginx与配置
第一步安装 使用Yum安装是推荐的方式,整体的流程非常的简单,也不容易出错,如果不需要什么特殊配置,建议使用Yum尽进行安装. 第一种安装方式,通过添加epel源 yum install epel-r ...
- sublime 插件cssrem安装及配置
CSSREM CSSREM 是一个CSS的 px 值转 rem 值的Sublime Text3自动完成插件.先来看看插件的效果: 一个CSS的px值转rem值的Sublime Text 3自动完成插件 ...
- hibernate学习系列-----(7)hibernate对集合属性的操作之List集合篇
今天要写的内容其实不多,本打算将hibernate对集合的操作的内容直接归结为一篇的,但想一想,还是分开写的比较好,毕竟前面的已经发布出去来了,废话不多说,开始吧! 依旧新建一个StudentList ...
- C# 鼠标全局钩子
/// <summary> /// 鼠标全局钩子 /// </summary> public class MouseHook { private const int WM_MO ...
- Android项目-几种常见的应用架构
android两种Tab分页的方式:TabActivity和ActivityGroup http://www.fengfly.com/plus/view-209429-1.html 1.单个Activ ...
- 详解Android首选项框架的使用
首选项这个名词对于熟悉Android的朋友们一定不会感到陌生,它经常用来设置软件的运行参数. Android提供了一种健壮并且灵活的框架来处理首选项.它提供了简单的API来隐藏首选项的读取和持久化,并 ...