ZBar之自定义二维码扫描
// // YvanQRCodeViewController.m // zBar // // Created by City--Online on 15/6/8. // Copyright (c) 2015年 CYW. All rights reserved. // #import "YvanQRCodeViewController.h" #import "ZBarSDK.h" #define SCANVIEW_EdgeTop 40.0 #define SCANVIEW_EdgeLeft 50.0 #define TINTCOLOR_ALPHA 0.2 //浅色透明度 #define DARKCOLOR_ALPHA 0.5 //深色透明度 #define VIEW_WIDTH self.view.bounds.size.width #define VIEW_HEIGHT self.view.bounds.size.height @interface YvanQRCodeViewController ()<ZBarReaderViewDelegate> { UIView *_QrCodeline; NSTimer *_timer; //设置扫描画面 UIView *_scanView; ZBarReaderView *_readerView; } @end @implementation YvanQRCodeViewController - (void)viewDidLoad { [super viewDidLoad]; self.title = @"扫描二维码" ; //初始化扫描界面 [ self setScanView ]; _readerView = [[ ZBarReaderView alloc ] init ]; _readerView.frame = CGRectMake ( , , VIEW_WIDTH , VIEW_HEIGHT ); _readerView.tracksSymbols = NO ; _readerView.readerDelegate = self ; [ _readerView addSubview : _scanView ]; //关闭闪光灯 _readerView.torchMode = ; [ self.view addSubview : _readerView ]; //扫描区域 //readerView.scanCrop = [ _readerView start ]; [ self createTimer ]; } #pragma mark -- 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)]; //判断是否包含 头'http:' NSString *regex = @"http+:[^//s]*" ; NSPredicate *predicate = [ NSPredicate predicateWithFormat : @"SELF MATCHES %@" ,regex]; UIAlertView *alertView=[[ UIAlertView alloc ] initWithTitle : @"" message :symbolStr delegate : nil cancelButtonTitle : @"取消" otherButtonTitles : nil ]; [alertView show ]; //判断是否包含 头'ssid:' NSString *ssid = @"ssid+:[^//s]*" ; NSPredicate *ssidPre = [ NSPredicate predicateWithFormat : @"SELF MATCHES %@" ,ssid]; if ([predicate evaluateWithObject :symbolStr]) { } else if ([ssidPre evaluateWithObject :symbolStr]){ NSArray *arr = [symbolStr componentsSeparatedByString : @";" ]; NSArray * arrInfoHead = [[arr objectAtIndex : ] componentsSeparatedByString : @":" ]; NSArray * arrInfoFoot = [[arr objectAtIndex : ] componentsSeparatedByString : @":" ]; symbolStr = [ NSString stringWithFormat : @"ssid: %@ /n password:%@" , [arrInfoHead objectAtIndex : ],[arrInfoFoot objectAtIndex : ]]; UIPasteboard *pasteboard=[ UIPasteboard generalPasteboard ]; //然后,可以使用如下代码来把一个字符串放置到剪贴板上: pasteboard. ]; } } - ( void )setScanView { _scanView =[[ UIView alloc ] initWithFrame : CGRectMake ( , , VIEW_WIDTH , VIEW_HEIGHT )]; _scanView . backgroundColor =[ UIColor clearColor ]; //最上部view UIView * upView = [[ UIView alloc ] initWithFrame : CGRectMake ( , , VIEW_WIDTH , SCANVIEW_EdgeTop )]; upView. alpha = TINTCOLOR_ALPHA ; upView. backgroundColor = [ UIColor blackColor ]; [ _scanView addSubview :upView]; //左侧的view UIView *leftView = [[ UIView alloc ] initWithFrame : CGRectMake ( , SCANVIEW_EdgeTop , SCANVIEW_EdgeLeft , VIEW_WIDTH - * SCANVIEW_EdgeLeft )]; leftView. alpha = TINTCOLOR_ALPHA ; leftView. backgroundColor = [ UIColor blackColor ]; [ _scanView addSubview :leftView]; /******************中间扫描区域****************************/ UIImageView *scanCropView=[[ UIImageView alloc ] initWithFrame : CGRectMake ( SCANVIEW_EdgeLeft , SCANVIEW_EdgeTop , VIEW_WIDTH - * SCANVIEW_EdgeLeft , VIEW_WIDTH - * SCANVIEW_EdgeLeft )]; //scanCropView.image=[UIImage imageNamed:@""]; scanCropView. layer . borderColor =[ UIColor yellowColor]. CGColor ; scanCropView. layer . borderWidth = 2.0 ; scanCropView. backgroundColor =[ UIColor clearColor ]; [ _scanView addSubview :scanCropView]; //右侧的view UIView *rightView = [[ UIView alloc ] initWithFrame : CGRectMake ( VIEW_WIDTH - SCANVIEW_EdgeLeft , SCANVIEW_EdgeTop , SCANVIEW_EdgeLeft , VIEW_WIDTH - * SCANVIEW_EdgeLeft )]; rightView. alpha = TINTCOLOR_ALPHA ; rightView. backgroundColor = [ UIColor blackColor ]; [ _scanView addSubview :rightView]; //底部view UIView *downView = [[ UIView alloc ] initWithFrame : CGRectMake ( , VIEW_WIDTH - * SCANVIEW_EdgeLeft + SCANVIEW_EdgeTop , VIEW_WIDTH , VIEW_HEIGHT -( VIEW_WIDTH - * SCANVIEW_EdgeLeft + SCANVIEW_EdgeTop )- )]; //downView.alpha = TINTCOLOR_ALPHA; downView. backgroundColor = [[ UIColor blackColor ] colorWithAlphaComponent : TINTCOLOR_ALPHA ]; [ _scanView addSubview :downView]; //用于说明的label UILabel *labIntroudction= [[ UILabel alloc ] init ]; labIntroudction. backgroundColor = [ UIColor clearColor ]; labIntroudction. frame = CGRectMake ( , , VIEW_WIDTH , ); labIntroudction. numberOfLines = ; labIntroudction. font =[ UIFont systemFontOfSize : 15.0 ]; labIntroudction. textAlignment = NSTextAlignmentCenter ; labIntroudction. textColor =[ UIColor whiteColor ]; labIntroudction. text = @"将二维码对准方框,即可自动扫描" ; [downView addSubview :labIntroudction]; UIView *darkView = [[ UIView alloc ] initWithFrame : CGRectMake ( , downView. frame . size . height - 100.0 , VIEW_WIDTH , 100.0 )]; darkView. backgroundColor = [[ UIColor blackColor ] colorWithAlphaComponent : DARKCOLOR_ALPHA ]; [downView addSubview :darkView]; //用于开关灯操作的button UIButton *openButton=[[ UIButton alloc ] initWithFrame : CGRectMake ( , , 300.0 , 40.0 )]; [openButton setTitle : @"开启闪光灯" forState: UIControlStateNormal ]; [openButton setTitleColor :[ UIColor whiteColor ] forState : UIControlStateNormal ]; openButton. titleLabel . textAlignment = NSTextAlignmentCenter ; openButton. backgroundColor =[ UIColor greenColor ]; openButton. titleLabel . font =[ UIFont systemFontOfSize : 22.0 ]; [openButton addTarget : self action : @selector (openLight) forControlEvents : UIControlEventTouchUpInside ]; [darkView addSubview :openButton]; //画中间的基准线 _QrCodeline = [[ UIView alloc ] initWithFrame : CGRectMake ( SCANVIEW_EdgeLeft , SCANVIEW_EdgeTop , VIEW_WIDTH - * SCANVIEW_EdgeLeft , )]; _QrCodeline . backgroundColor = [ UIColor yellowColor]; [ _scanView addSubview : _QrCodeline ]; } - ( void )openLight { ) { _readerView.torchMode = ; } else { _readerView.torchMode = ; } } - ( void )viewWillDisappear:( BOOL )animated { [ super viewWillDisappear :animated]; ) { _readerView . torchMode = ; } [ self stopTimer ]; [ _readerView stop ]; } //二维码的横线移动 - ( void )moveUpAndDownLine { CGFloat Y= _QrCodeline.frame.origin.y ; //CGRectMake(SCANVIEW_EdgeLeft, SCANVIEW_EdgeTop, VIEW_WIDTH-2*SCANVIEW_EdgeLeft, 1)] *SCANVIEW_EdgeLeft+SCANVIEW_EdgeTop==Y){ [UIView beginAnimations: @"asa" context: nil ]; [UIView setAnimationDuration: ]; _QrCodeline.frame=CGRectMake(SCANVIEW_EdgeLeft, SCANVIEW_EdgeTop, VIEW_WIDTH- *SCANVIEW_EdgeLeft, ); [UIView commitAnimations]; } else if (SCANVIEW_EdgeTop==Y){ [UIView beginAnimations: @"asa" context: nil ]; [UIView setAnimationDuration: ]; _QrCodeline.frame=CGRectMake(SCANVIEW_EdgeLeft, VIEW_WIDTH- *SCANVIEW_EdgeLeft+SCANVIEW_EdgeTop, VIEW_WIDTH- *SCANVIEW_EdgeLeft, ); [UIView commitAnimations]; } } - ( void )createTimer { //创建一个时间计数 _timer=[NSTimer scheduledTimerWithTimeInterval: 1.0 target: self selector: @selector (moveUpAndDownLine) userInfo: nil repeats: YES ]; } - ( void )stopTimer { if ([_timer isValid] == YES ) { [_timer invalidate]; _timer = nil ; } } // 是否支持转屏 - (BOOL)shouldAutorotate { return YES; } // 支持的屏幕方向,此处可直接返回 UIInterfaceOrientationMask 类型 // 也可以返回多个 UIInterfaceOrientationMask 取或运算后的值 - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end
ZBar之自定义二维码扫描的更多相关文章
- ios二维码扫描插件,适配当前主流扫描软件,自定义扫描界面。
二维码介绍: 二维码(QR(Quick Response)code),又称二维条码,最早起源于日本. 它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息 ...
- ZBar 是款桌面电脑用条形码/二维码扫描工具
ZBar 是款桌面电脑用条形码/二维码扫描工具 windows平台python 2.7环境编译安装zbar 最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本 ...
- Qt之二维码扫描
简述 二维码(QR Code)是用某种特定的几何图形按一定规律在平面(二维方向)分布的黑白相间的图形记录数据符号信息的.是所有信息数据的一把钥匙.应用十分广泛,如:产品防伪/溯源.广告推送.网站链接. ...
- Android快速实现二维码扫描--Zbar
Android中二维码扫描的最常用库是zxing和zbar,上一篇<Android快速实现二维码扫描–Zxing>介绍了Zxing.这次说Zbar,Zbar速度极快,我就比较常用,项目地址 ...
- 二维码扫描利用ZBar实现
上次是根据系统的属性自己封装的一个二维码扫描,这次给大家介绍一下基于ZBar集成的类似于QQ二维码扫描界面的二维码扫描的效果. ...
- android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)
写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载 zbarLib编译project project下载0积分 bug 在2.3的系统中Hol ...
- iOS - 二维码扫描和应用跳转
序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如ZXing或者ZBar.使用时集成麻烦, ...
- iOS开发-二维码扫描和应用跳转
iOS开发-二维码扫描和应用跳转 序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...
- 【转】Android手机客户端关于二维码扫描的源码--不错
原文网址:https://github.com/SkillCollege/QrCodeScan QrCodeScan 这是Android手机客户端关于二维码扫描的源码,使用了高效的ZBar解码库,并修 ...
随机推荐
- 移植u-boot.2012.04.01
/*************************************************** *u-boot版本:u-boot2012.04.01 *gcc版本:arm-linux-gcc ...
- MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份]
MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份] 1.Xtrabackup的安装 percona-xtrabackup-2.2.3-4982.el6.x86_ ...
- toggleClass
toggleClass 用来给匹配元素切换类 语法 参考 http://www.w3schools.com/jquery/html_toggleclass.asp $(selector).toggle ...
- zencart安装第三步出现空白
问题描述:在安装zencart时,在第三步同意协议,然后点击下一步时,页面经过漫长的等待后就显示空白. 解决方法:打开php.ini,将max_execution_time = 30 -> ma ...
- Asp.net页面跳转Session丢失问题
原本去年在做项目时,写好的一记篇博客分享给大家. Asp.net页面跳转Session丢失问题 编写人:CC阿爸 2014-4-2 l 近来在做泛微OA与公司自行开发的系统集成登录的问题.在使用 ...
- 什么是Ajax无刷新技术?
浏览器实例化一个Ajax对象,这个对象发送一个HTTP请求,并且携带一定的参数,传输到后台.后台服务器接收这些参数,同时过滤一下传过来的参数,做出逻辑判断.如果需要数据库操作参与,就要取出数据,格式化 ...
- 用PHP生成随机数的函数(代码示例)
转自:http://www.jbxue.com/article/5034.html 介绍:在早期的php中生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生 ...
- IntentService 串联 按顺序执行(此次任务执行完才执行下一个任务)
IntentService与Service的最大区别就是前者依次执行,执行完当前任务才执行下一个任务,后者并发执行 在IntentService里面不写onCreate方法 MainActivity: ...
- C# 代码重启windows服务
ServiceController service = new ServiceController("EnergyRecordService"); protected void b ...
- 程序员定制的中州韵(rime)windows版(小狼毫)微软双拼输入法
小狼毫所有的配置都是在用户文件夹下完成的 用户文件夹在win7的开始菜单的小狼毫文件夹中可以找到 所有设置希望生效须用小狼毫开始菜单中的重新部署来更新配置 -> weasel.custom.ya ...