iOS使用Zbar扫描二维码

标签(空格分隔):二维码扫描 iOS Zbar64位


正文:

首先下载一个支持64位系统的ZbarSDK的包,保存在了我的云盘里,地址:ZbarSDK

  1. 把文件拖到工程里面
  2. 然后添加依赖库:AVFoundation.framework、libiconv.2.dylib、CoreMedia.framework、CoreVideo.framework,其中libzbar.a是SDK中的,(如果需要通过SVN上传自己代码时,要记得还有这个.a文件)
  3. 在你要进行添加扫描的界面的.h里 可直接复制到工程里

    添加头文件
#import "ZBarSDK.h"
//设置代理
@protocol ErweimaDelegate <NSObject>
//扫描出结果则调用这个方法
-(void)finishRead:(NSString *)barCode;
@end @interface ErweimaViewController : superVC < ZBarReaderViewDelegate > //此处superVC是自定义的父类
@property (strong, nonatomic)id < ErweimaDelegate >delegate;
@end

4.在.m文件中:

@interface ErweimaViewController ()
{
ZBarReaderView *rederView;//二维码扫描View,可自定义样式
UIImageView *lineView;//自定义的扫描线
NSTimer *time;//定时器,控制扫描线跑动
}
//在进入界面时就开始扫描
-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated];
[rederView start];
}
//退出界面时就停止扫描
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[rederView stop];
}
-(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title = @"扫描"; [self initView]; } - (void)initView
{
rederView = [[ZBarReaderView alloc] init];
rederView.frame = CGRectMake(0, 0,self.view.frame.size.width,self.view.frame.size.height);
rederView.readerDelegate = self;
rederView.allowsPinchZoom = NO; // 不使用Pinch手势变焦
rederView.torchMode = 0;//闪光灯 关
rederView.trackingColor = [UIColor clearColor];//锁定图码 显示的颜色框 if (TARGET_IPHONE_SIMULATOR) {
ZBarCameraSimulator *camera = [[ZBarCameraSimulator alloc] initWithViewController:self];
camera.readerView = rederView;
}
[self.view addSubview:rederView];
/*************可忽略此域中的以下代码,可以自己自定义***************/ //扫描区域计算
CGRect scanMaskRect = CGRectMake(Width_Screen/2-75, 150, 150, 150);
CGRect scanCrop=[self getScanCrop:scanMaskRect readerViewBounds:rederView.bounds];
rederView.scanCrop = scanCrop;
[rederView.captureReader captureFrame];
[rederView start]; UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(-20, -64, Width_Screen+40, Height_Screen)];
image.image = [UIImage imageNamed:@"111111111"];
image.backgroundColor = [UIColor clearColor];
image.alpha = 0.3;
[self.view addSubview:image]; //这里添加了类似微信的扫描线,并开始上线滑动动画
lineView=[[UIImageView alloc] initWithFrame:CGRectMake(51, 200, 219, 3)];
// lineView.image=[UIImage imageNamed:@"scan_line"];
lineView.backgroundColor = UIColor_Theme;
[self.view addSubview:lineView];
[self loadAnimationStart];
} -(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)rvBounds{
CGFloat x,y,width,height;
x = rect.origin.y / rvBounds.size.height;
y = 1 - (rect.origin.x + rect.size.width) / rvBounds.size.width;
width = (rect.origin.y + rect.size.height) / rvBounds.size.height;
height = 1 - rect.origin.x / rvBounds.size.width;
return CGRectMake(x, y, width, height); } -(void)loadAnimationStart{ if(Width_Screen != 320){ [UIView animateWithDuration:2.0 animations:^{
lineView.frame=CGRectMake(lineView.frame.origin.x, 390,lineView.frame.size.width,lineView.frame.size.height);
} completion:^(BOOL finished) { time = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(secStart) userInfo:nil repeats:NO];
}];
}else{ [UIView animateWithDuration:2.0 animations:^{
lineView.frame=CGRectMake(lineView.frame.origin.x, 345,lineView.frame.size.width,lineView.frame.size.height);
} completion:^(BOOL finished) { time = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(secStart) userInfo:nil repeats:NO];
}]; } }
-(void)secStart{ if(Width_Screen != 320){
lineView.frame=CGRectMake(lineView.frame.origin.x, 175,lineView.frame.size.width,lineView.frame.size.height);
if (time != nil) {
[self loadAnimationStart];
} }else{
lineView.frame=CGRectMake(lineView.frame.origin.x, 130,lineView.frame.size.width,lineView.frame.size.height);
if (time != nil) {
[self loadAnimationStart];
NSLog(@"123");
}
NSLog(@"qwe");
} } -(void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image
{
NSString *str;//扫描出的字段,记录下来 for (ZBarSymbol *symbol in symbols) {
NSLog(@"%@", symbol.data);
str=symbol.data;
[rederView stop];
[self.navigationController popViewControllerAnimated:YES];
[self showHudMessageAndHidden:str];//展示出扫描结果,根据需求可自定义展示样式
lineView.hidden = YES;
[time setFireDate:[NSDate distantFuture]];
[time invalidate];
time = nil;
break;
} //这个代理是 返回到上个界面把str传过去的,根据需求可改变
if([_delegate respondsToSelector:@selector(finishRead:)]){ [_delegate finishRead:str];
} }

结束,搞定。预祝成功。

iOS使用Zbar扫描二维码的更多相关文章

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

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

  2. 在iOS中使用ZBar扫描二维码和条形码

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

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

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

  4. QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式

    目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到 ...

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

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

  6. 微信连WiFi关注公众号流程更新 解决ios微信扫描二维码不关注就能上网的问题

    前几天鼓捣了一下微信连WiFi功能,设置还蛮简单的,但ytkah发现如果是ios版微信扫描微信连WiFi生成的二维码不用关注公众号就可以直接上网了,而安卓版需要关注公众号才能上网,这样就少了很多ios ...

  7. iOS中 扫描二维码/生成二维码详解 韩俊强的博客

    最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: se ...

  8. ionic 扫描二维码 Barcode Scanner、QR Scanner、ZBar

    1.简介 ionic 官方给我们提供了三个扫描二维码条形码插件,分别为: Barcode Scanner 样式好看,类似支付宝的扫描框.速度稍微比最后一个慢几百毫秒,主要问题是 Android 部分手 ...

  9. iOS中 扫描二维码/生成二维码具体解释 韩俊强的博客

    近期大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: se ...

随机推荐

  1. 基于X86平台的PC机通过网络发送一个int(32位)整数的字节顺序

    1.字节顺序 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端.大端两种字节顺序.小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处:大端字节序是高字节数据存 ...

  2. 门外汉的IT

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 计算机很早就走入了我的生活.小学时,家里放一台联想“天琴”的电脑.它霸气的音箱造型 ...

  3. 关于SubSonic3.0插件更新字符串过长引发的System.Data.SqlClient.SqlException的异常修复

    最近公司客服提交了个BUG,说是更新产品详细信息时,有的可以有的更新不了,前段时间一直没空所以暂时放下,刚才又出现这个问题,所以马上处理了一下. 打开项目解决方案,进入DEBUG模式,拿到操作的数据提 ...

  4. 关于Docker目录挂载的总结

    Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定. 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: # docker ...

  5. 从客户端(&)中检测到有潜在危险的 Request.Path 值

    首先,这个问题出现在 ASP.NET MVC 应用程序中,所以下面的解决方式都是在这个环境下. 关于这个问题,网上又很多的答案,当时也搜了一些: A potentially dangerous Req ...

  6. 1Z0-053 争议题目解析695

    1Z0-053 争议题目解析695 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 695.Identify two options that Oracle recommends w ...

  7. 跟我学PHP第二篇- 配置Mysql以及PHP WampServer篇(1)

    大家好,昨天我给大家介绍了如何去安装ZEND STUDIO,下面昨天文章的链接: http://www.cnblogs.com/kmsfan/p/zendStudio.html 本节为配置的第一部分, ...

  8. Xamarin.Android之简单的抽屉布局

    0x01 前言 相信对于用过Android版QQ的,应该都不会陌生它那个向右滑动的菜单(虽说我用的是Lumia) 今天就用Xamarin.Android实现个比较简单的抽屉布局.下面直接进正题. 0x ...

  9. 使用toggle()方法进行显示隐藏

    这是一个示例: <html> <head> <script type="text/javascript" src="http://keley ...

  10. Web 分页

    以Car表为例分页 页面以table展示数据分页 页面代码 <asp:Repeater ID="Repeater1" runat="server"> ...