NSRunLoop类声明的编程接口用于管理输入源对象。一个NSRunLoop对象处理像来自窗体系统中的鼠标和键盘事件,NSPORT对象和NSConnection连接对象这类的输入源。一个NSRunLoop对象也处理的NSTimer事件。

你的应用程序不能建立或明白管理NSRunLoop对象。

每一个NSThread对象。包含应用程序的主线程。具有依据须要自己主动创建一个NSRunLoop对象。假设你须要訪问当前线程的执行循环,能够使用类方法currentRunLoop。

1.下载ZBar的第三方库。加入入project

2.加入相关库
   AVFoundation.framework
   CoreMedia.framework
   CoreVideo.framework
   libiconv.2.4.0.dylib  
3.添加一个以ZBarReaderViewController为父类的控制器。并实现ZBarReaderDelegate代理
4.在控制器中加入例如以下代码
条形码的扫描

- (void)viewDidLoad
{
    [super viewDidLoad];
    //设置代理
    self.readerDelegate = self;
    //扫瞄图像
    ZBarImageScanner *mScanner = self.scanner;
    //是否显示绿色的追踪框。注意。即当选择yes的时候。这个框只当扫瞄EAN和I2/5的时候才可见。

    self.tracksSymbols = YES;
    //是否使用备用控制组
    self.showsZBarControls = YES;
    //支持的方向。用ZBarOrientationMask() 和 ZBarOrientationMaskAll
    self.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationMaskPortrait);
    
    //提供自己定义覆盖层。注意,在showsZBarControls启用的情况下才干够用
    UIView *view = [[UIView alloc] initWithFrame:self.view.bounds];
    view.backgroundColor = [UIColor grayColor];
    self.cameraOverlayView = view;
    
    //裁剪扫描的图像,在扫描前图像将被裁剪到这个矩形内。这个矩形框是将图像的尺寸和宽高比标准化,
    //有效值将放置矩形内介于0和1的每一个轴。当中x轴相应于图像的长轴。默觉得完整的图像(0。0,1,1)。

//    self.scanCrop
    //调节以适应预览图片
//    self.cameraViewTransform

     //解码配置
    [mScanner setSymbology:ZBAR_I25
                   config:ZBAR_CFG_ENABLE
                       to:0];
// Do any additional setup after loading the view.
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self.readerView start];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.readerView stop];
}

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    //获取扫瞄结果
    id<NSFastEnumeration>
results = [info objectForKey:ZBarReaderControllerResults];
    ZBarSymbol *symbol = nil;

     //不过抓住第一个条形码
    for (symbol in results)
        break;
    NSString *text = symbol.data;
        //解决中文乱码问题
    if ([text canBeConvertedToEncoding:NSShiftJISStringEncoding])
{
        text = [NSString stringWithCString:[text cStringUsingEncoding:NSShiftJISStringEncoding] encoding:NSUTF8StringEncoding];
    }
    NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:[NSString stringWithFormat:@"%@",text],@"resultLabel",[info objectForKey:UIImagePickerControllerOriginalImage],@"resultImgView", nil];
    [self performSelectorOnMainThread:@selector(mainAction:) withObject:dic waitUntilDone:NO];
}

- (void)mainAction:(NSDictionary *)dic
{
    OtherViewController *other = [[OtherViewController alloc] init];
    other.resultString = [dic objectForKey:@"resultLabel"];
    other.image = [dic objectForKey:@"resultImgView"];
    [self.navigationController pushViewController:other animated:YES];

}
此时,我们再来看看ZBarReaderViewController中的ZBarReaderView这个类

// supply a pre-configured image scanner.

//支持一个预先准备的图片扫描
- (id) initWithImageScanner: (ZBarImageScanner*)
imageScanner;

// start the video stream and barcode reader.

//開始视频流和条形码扫描
- (void) start;

// stop the video stream and barcode reader.

//停止视频流和条形码扫描
- (void) stop;

// clear the internal result cache

//清理内部的缓存
- (void) flushCache;

// compensate for device/camera/interface orientation

// 适应设备的方向
- (void) willRotateToInterfaceOrientation: (UIInterfaceOrientation)
orient

                                 duration: (NSTimeInterval) duration;

// delegate is notified of decode results.

//代理
@property (nonatomic, assign) id<ZBarReaderViewDelegate>
readerDelegate;

// access to image scanner for configuration.

//直接对图片扫描配置
@property (nonatomic, readonly) ZBarImageScanner *scanner;

// whether to display the tracking annotation for uncertain barcodes
// (default YES).

// 是否为不确定的条形码显示追踪
@property (nonatomic) BOOL tracksSymbols;

// color of the tracking box (default green)

//追踪框的颜色,默觉得绿色

@property (nonatomic, retain) UIColor *trackingColor;

// enable pinch gesture recognition for zooming the preview/decode
// (default YES).

// 能否对预览图进行手势缩放,默认是能够的
@property (nonatomic) BOOL allowsPinchZoom;

// torch mode to set automatically (default Auto).

// 0为不闪光。1为闪光

@property (nonatomic) NSInteger torchMode;

// zoom scale factor applied to video preview *and* scanCrop.
// also updated by pinch-zoom gesture.  clipped to range [1,maxZoom],
// defaults to 1.25

// 施加于摄像前景画面和扫描区域的缩放
@property (nonatomic) CGFloat zoom;
- (void) setZoom: (CGFloat) zoom

        animated: (BOOL) animated;

// the region of the image that will be scanned.  normalized coordinates.

// 图片将被扫描的区域,标准坐标

@property (nonatomic) CGRect scanCrop;
二维码的扫描
实现代理ZBarReaderViewDelegate

- (void)readerView:(ZBarReaderView *)readerView
didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image
{
    ZBarSymbol *symbol = nil;
    for (symbol in symbols)
        break;
    NSString *text = symbol.data;
    NSLog(@"%@",text);

}

ZBar的简单使用的更多相关文章

  1. 使用Zbar实现简单的二维码扫描

    导入ZBarSDK导入系统库 AVFoundation.framework,CoreMedia.framework,CoreVideo.framework,QuartzCore.framework,l ...

  2. centos 6.5 python2.6.6 zbar 安装

       经过数次折腾,终于搞明白了这个zbar的安装顺序.   1.先安装http://zbar.sourceforge.net/download.html 下的zbar,   2.python 安装z ...

  3. Zbar算法流程介绍

    博客转载自:https://blog.csdn.net/sunflower_boy/article/details/50783179 zbar算法是现在网上开源的条形码,二维码检测算法,算法可识别大部 ...

  4. 有关python下二维码识别用法及识别率对比分析

    最近项目中用到二维码图片识别,在python下二维码识别,目前主要有三个模块:zbar .zbarlight.zxing. 1.三个模块的用法: #-*-coding=utf-8-*- import ...

  5. iOS ZBar扫码简单实现

    导入ZBarSDK文件并引入一下框架 AVFoundation.framework CoreMedia.framework CoreVideo.framework QuartzCore.framewo ...

  6. 二维码开源库zbar、zxing使用心得

    首先说明我的测试场景是“识别打印在纸上的二维码”,在扫描结果中寻找二维码并进行识别,而不是直接让摄像头对着二维码扫描. zbar和zxing用的都是自己从github上clone的c++源码/接口编译 ...

  7. windows平台python 2.7环境编译安装zbar

    最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家. 一.zbar官方介绍 ZBar 是款桌面电脑用条形码/二维码扫描工具,支持摄像头及图 ...

  8. ZBar与ZXing使用后感觉

    [原]ZBar与ZXing使用后感觉(上) 2014-3-18阅读2011 评论1 最近对二维码比较感兴趣,还是那句老话,那么我就对比了一下zxing和zbar 如果对于这两个的背景不了解的话,可以看 ...

  9. 编译安装 zbar 时两次 make 带来的惊喜

    为了装 php 的条形码扩展模块 php-zbarcode,先装了一天的 ImageMagick 和 zbar.也许和我装的 Ubuntu 17.10 的有版本兼容问题吧,总之什么毛病都有,apt 不 ...

随机推荐

  1. LightOJ - 1151概率dp+高斯消元

    概率dp+高斯消元 https://vjudge.net/problem/LightOJ-1151 题意:刚开始在1,要走到100,每次走的距离1-6,超过100重来,有一些点可能有传送点,可以传送到 ...

  2. Lua学习笔记3. 函数可变参数和运算符、转义字符串、数组

    1. Lua函数可以接受变长数目的参数,和C语言类似,在函数的参数列表中使用(...)表示函数可以接受变长参数 lua函数将参数存放在一个table中,例如arg,那么#arg可以获得参数的个数 fu ...

  3. office套件

    一.PDF模块 使用PyPDF2模块 pip install PyPDF2 1.1 从PDF读取数据 直接读取,并打印出来.但是这种打印存在一个问题,不能中文字符 import PyPDF2 impo ...

  4. 轮播图插件 SuperSlide2.1滑动门jQuery插件

    http://down.admin5.com/demo/code_pop/18/562/ SuperSlide2.1滑动门jQuery插件

  5. 连接GitHub的方法

    连接到GitHub 首先在本地创建 ssh key: ssh-keygen -t rsa -C "your_email@youremail.com" 后面的 your_email@ ...

  6. 什么是Quartz?

    什么是Quartz Quartz是一个开源的作业调度框架,Quartz根据用户设定的时间规则来执行作业,使用场景:在平时的工作中,估计大多数都做过轮询调度的任务,比如定时轮询数据库同步,定时邮件通知. ...

  7. canvas 画布 文字描边

    总结一下,canvas 画布 文字描边的2种方法以及其不同的视觉效果: 效果图: 具体代码: <canvas id="canvas" width="800" ...

  8. 什么是web?什么是web服务器?什么是应用服务器?

    1.什么是Web? 简单来说,Web就是在Http协议基础之上,利用浏览器进行访问的网站.目前来看最常用的意义是指在 Intenet 上和 HTML 相关的部分.换句话说,目前在 Intenet 上通 ...

  9. Linux:col命令详解

    col 经常用于将说明文件转存为纯文本以方便阅读 语法 col(选项) 选项 -b:过滤掉所有的控制字符,包括RLF和HRLF: -f:滤掉RLF字符,但允许将HRLF字符呈现出来: -x:以多个空格 ...

  10. v-if和v-show小对比

    相同点 都可以控制元素的显示与不显示.在判断DOM节点是否要显示. 不同点 1.实现方式 v-if是根据后面的数据的真假判断直接从DOM树上删除或重建元素节点. v-show 只是修改元素的css的样 ...