最近做了个外包项目,里面用到了二维码扫描和微信支付!之前比较熟悉的是ZXing,但是在Xcode7.1里面发现竟然莫名的不支持,木有办法,从网上查了一下还有一种支持二维码扫描的东西,没错就是接下来我要说的东东,二维码扫描的利器 ZBarSDK。闲言少絮叨,言归正传!

1、下载 ZBarSDK 官网 https://github.com/bmorton/ZBarSDK

2、导入如下框架

3、在AppDelegetem文件中#import "ZBarSDK.h"

并且 在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

里面添加下面的代码

//二维码读取

[ZBarReaderViewclass];

4、在二维码扫描界面开始#import "ZBarSDK.h" ,添加

<ZBarReaderDelegate,ZBarReaderViewDelegate>委托

下面开始介绍扫描步骤:
1.通过摄像头获取图片
2.通过Zbar的内部处理方法来识别图片
3.处理信息并显示

代码实现:

1.创建视图

-(void)creatView{    //用于响应扫描事件,点击开始扫描    button = [UIButton buttonWithType:UIButtonTypeRoundedRect];    [button setFrame:CGRectMake(110, 200, 100, 40)];    [button setTitle:@"扫描" forState:UIControlStateNormal];    [button addTarget:self action:@selector(scanButtonPressed:) forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:button];    //用于显示扫描到的图像    imageview = [[UIImageView alloc]initWithFrame:CGRectMake(20, 50, 280, 280)];    [self.view addSubview:imageview];    //用于显示扫描到的信息    label = [[UILabel alloc]initWithFrame:CGRectMake(20, 356, 280, 68)];    [self.view addSubview:label];}

2.扫描二维码

方法一:直接调用ZBar提供的ZBarReaderViewController打开一个扫描界面

step1:扫描二维码操作

-(void)scanButtonPressed:(id)sender{    ZBarReaderViewController *reader = [[ZBarReaderViewController alloc]init];          reader.readerDelegate = self;    reader.supportedOrientationsMask = ZBarOrientationMaskAll;    ZBarImageScanner *scanner = reader.scanner;    [scanner setSymbology:ZBAR_I25 config:ZBAR_CFG_ENABLE to:0];    [self presentViewController:reader animated:YES completion:nil];}

step2:找到二维码回调的时候会执行ZBarReaderDelegate的对应方法

- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info{    //通过info获得结果    id<NSFastEnumeration> results =    [info objectForKey: ZBarReaderControllerResults];    ZBarSymbol *symbol = nil;    for(symbol in results)        break;  <span style="white-space:pre">	</span>    imageview.image =    [info objectForKey: UIImagePickerControllerOriginalImage];    //扫描界面退出    [reader dismissViewControllerAnimated:YES completion:nil];}

方法二:使用ZBar提供的可以嵌在其他视图中的ZBarReaderView

step1:扫描二维码操作

-(void)scanButtonPressed:(id)sender{    ZBarReaderView *readerView = [[ZBarReaderView alloc]init];    readerView.frame = CGRectMake(10, 44, 300, 300);    readerView.readerDelegate = self;    //扫描区域    CGRect scanMaskRect = CGRectMake(60, CGRectGetMidY(readerView.frame) - 126, 200, 200);    //处理模拟器    if (TARGET_IPHONE_SIMULATOR) {        ZBarCameraSimulator *cameraSimulator        = [[ZBarCameraSimulator alloc]initWithViewController:self];        cameraSimulator.readerView = readerView;    }    [self.view addSubview:readerView];    //扫描区域计算    readerView.scanCrop = [self getScanCrop:scanMaskRect readerViewBounds:readerView.bounds];    //调用ZBarReaderView的start方法开始扫描    [readerView start];}

step2:扫描区域计算

-(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)readerViewBounds{    CGFloat x,y,width,height;        x = rect.origin.x / readerViewBounds.size.width;    y = rect.origin.y / readerViewBounds.size.height;    width = rect.size.width / readerViewBounds.size.width;    height = rect.size.height / readerViewBounds.size.height;        return CGRectMake(x, y, width, height);}

step3:在扫描到二维码回调的时候会执行ZBarReaderViewDelegate的对应方法

- (void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image
{
   for (ZBarSymbol *symbol in symbols)
   { NSLog(@"%@", symbol.data);
        //将信息显示在lable上
        label.text = symbol.data ;
     break;
   }
  //调用ZBarReaderView的stop方法停止扫描
[readerView stop];
}

另外有一点需要注意的地方,二维码扫描所在页面和其他页面间的跳转尽量用

SaoMiaoVC *saomiao = [[[SaoMiaoVC alloc]init]autorelease];

saomiao.hidesBottomBarWhenPushed=YES;

saomiao.delegate=self;

UINavigationController *nav= [[[UINavigationController alloc] initWithRootViewController:saomiao] autorelease];

[self presentViewController:nav animated:YES completion:nil]; 这种方式,因为用push 的话容易因为退出或者销毁得不及时而产生各种各样的问题!

在iOS中使用ZBar扫描二维码和条形码的更多相关文章

  1. 在iOS中使用ZBar扫描二维码

    最近在做的项目中需要用到二维码扫描功能,之前在Android中使用过ZXing识别二维码,ZXing也有对应的iOS版本,经过了解,ZBar也是一个常用的二维码识别软件,并分别提供了iOS和Andro ...

  2. iOS使用Zbar扫描二维码

    iOS使用Zbar扫描二维码 标签(空格分隔):二维码扫描 iOS Zbar64位 正文: 首先下载一个支持64位系统的ZbarSDK的包,保存在了我的云盘里,地址:ZbarSDK 把文件拖到工程里面 ...

  3. 制作IOS企业版App网页扫描二维码下载安装

    有时候我们需要在XX网站的主页上去扫描二维码下载,那么ios开发中如何做到这一点呢. 我给大家解答一下,这也是在最近工作中用到的部分,在网上了解了一些. 下面给大家分解一下步骤: 1.Plist 和 ...

  4. 实现zbar扫描二维码的时候就把照片存储出来的办法

    业务场景       当实现二维码扫描的时候(用的扫码库是zbar),有时候需要悄悄的整个扫描的照片存储下来,(charles有部分变态业务就是这样)就是说给扫描的图片照个全景照片. 那么代码如何实现 ...

  5. iOS原生的AVFoundation扫描二维码/条形码

    #import <AVFoundation/AVFoundation.h> @interface ViewController ()<AVCaptureMetadataOutputO ...

  6. android 项目学习随笔二十一(IM、语音识别、机器人、统计、扫描二维码、条形码)

    语音识别:科大讯飞语音云 http://www.xfyun.cn/ 语音机器人模拟 public class TalkBean { public String text; public boolean ...

  7. iOS - 原生的CIFilter生成二维码和条形码

    使用CIFilter可以不引入任何第三方库,就可以生成想要的二维码和条形码,今天简单的介绍一下使用CIFilter生成二维码和条形码.系统CIFilter生成的二维码和条形码的大小有时并不能满足需求, ...

  8. iOS中 基于LBXScan库二维码扫描 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 首先声明这个二维码扫描是借助于zxing. 功能模块都完全封装好了,不过界面合你口味,直接使用就好,如果不合口味,后 ...

  9. iOS 原生态扫描二维码、条形码的功能。

    1.导入AVFoundatin.framework. 2.新建一个viewController,命名为QRScanViewController,用于扫描的界面. h文件如下,设置代理. #import ...

随机推荐

  1. D. Road to Post Office 解析(思維)

    Codeforce 702 D. Road to Post Office 解析(思維) 今天我們來看看CF702D 題目連結 題目 略,請直接看原題. 前言 原本想說會不會也是要列式子解或者二分搜,沒 ...

  2. 【Deeplearning】(转)深度学习知识网络

    转自深度学习知识框架,小象牛逼! 图片来自小象学院公开课,下面直接解释几条线 神经网络 线性回归 (+ 非线性激励) → 神经网络 有线性映射关系的数据,找到映射关系,非常简单,只能描述简单的映射关系 ...

  3. DateTimeFormatter接替SimpleDateFormat

    java程序猿经常会碰到的一个问题就是日期格式化.当接收参数中有日期或时间,那么就需要与前端商量好其格式,这边我知道是2种:1.时间戳 2.字符串. 先说一下时间戳,这个形势的参数,Java只需new ...

  4. Ordering Cows

    题意描述 好像找不到链接(找到了请联系作者谢谢),所以题目描述会十分详细: Problem 1: Ordering Cows [Bruce Merry, South African Computer ...

  5. Swagger 3.0 天天刷屏,真的香吗?

    持续原创输出,点击上方蓝字关注我 目录 前言 官方文档如何说? Spring Boot版本说明 添加依赖 springfox-boot-starter做了什么? 撸起袖子就是干? 定制一个基本的文档示 ...

  6. rpm包的卸载与安装

    1. rpm包的管理介绍:一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中,它生成具有RPM扩展名的文件,RPM是RedHat Package Manager(RedHat软件包管 ...

  7. 凯撒密码(Java)

    事实上就是把每个字母偏移一下而已,并且字符不限于a-zA-z,可以是别的,那就很显而易见了,代码如下:定义一个Caesar密码类,成员变量只有密钥,也就是偏移量key 代码如下: public cla ...

  8. GROUP BY 分组后得到最新即时间最大的一条数据(需添加limit才可生效)

    当使用GROUP BY 分组,默认返回的数据是组中最小的记录即id最小的数据, 当开发中经常会需要分组后将最新的数据放在前面, 为了实现需求,使用了嵌套查询,分别使用order by来排序 SELEC ...

  9. 13 SOAP

    13 SOAP SOAP(原为Simple Object Access Protocol的首字母缩写,即简单对象访问协议)是交换数据的一种协议规范,使用在计算机网络Web服务(web service) ...

  10. Elasticsearch 第七篇:父子结构mapping设计以及相关查询

    h2.post_title { background-color: rgba(43, 102, 149, 1); color: rgba(255, 255, 255, 1); font-size: 1 ...