二维码框架ZBarSDK的使用和自己定义二维码扫描界面方法
假设你不知道ZBarSDK怎么用,请下载demo
http://download.csdn.net/detail/u013686641/7858917
假设你已经配置好ZBarSDK 。那么以下这个类能够直接用
以下是效果图
//
// 头文件
// TestProject
//
#import <UIKit/UIKit.h>
#import "ZBarSDK.h"
@interface yxpQrCode :UIViewController
@end
//
// 实现文件
// TestProject
//
#import "yxpQrCode.h"
#define SCANVIEW_EdgeTop
40.0
#define SCANVIEW_EdgeLeft
50.0
#define TINTCOLOR_ALPHA
0.2 //浅色透明度
#define DARKCOLOR_ALPHA
0.5 //深色透明度
@interfaceyxpQrCode ()<ZBarReaderViewDelegate>
{
UIView *_QrCodeline;
NSTimer *_timer;
//设置扫描画面
UIView *_scanView;
ZBarReaderView *_readerView;
}
@end
@implementation yxpQrCode
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle
*)nibBundleOrNil
{
self = [superinitWithNibName:nibNameOrNil
bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
returnself;
}
- (void)viewDidLoad
{
[superviewDidLoad];
self.title=@"扫描二维码";
//初始化扫描界面
[selfsetScanView];
_readerView= [[ZBarReaderViewalloc]init];
,
VIEW_WIDTH);
_readerView.tracksSymbols=NO;
_readerView.readerDelegate =self;
[_readerViewaddSubview:_scanView];
//关闭闪光灯
;
[self.viewaddSubview:_readerView];
//扫描区域
//readerView.scanCrop =
[_readerViewstart];
[selfcreateTimer];
}
#pragma mark -- ZBarReaderViewDelegate
-(void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet
*)symbols fromImage:(UIImage *)image
{
constzbar_symbol_t *symbol =zbar_symbol_set_first_symbol(symbols.zbarSymbolSet);
NSString *symbolStr = [NSStringstringWithUTF8String:
zbar_symbol_get_data(symbol)];
//推断是否包括 头'http:'
NSString *regex =@"http+:[^\\s]*";
NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"SELF
MATCHES %@",regex];
UIAlertView *alertView=[[UIAlertViewalloc]
initWithTitle:@""message:symbolStr
delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];
[alertViewshow];
//推断是否包括 头'ssid:'
NSString *ssid =@"ssid+:[^\\s]*";;
NSPredicate *ssidPre = [NSPredicatepredicateWithFormat:@"SELF
MATCHES %@",ssid];
if ([predicate
evaluateWithObject:symbolStr]) {
}
else
if([ssidPreevaluateWithObject:symbolStr]){
NSArray *arr = [symbolStr
componentsSeparatedByString:@";"];
]componentsSeparatedByString:@":"];
]componentsSeparatedByString:@":"];
symbolStr = [NSStringstringWithFormat:@"ssid:
%@ \n password:%@",
[arrInfoHead],[arrInfoFoot]];
UIPasteboard *pasteboard=[UIPasteboardgeneralPasteboard];
//然后,能够使用例如以下代码来把一个字符串放置到剪贴板上:
pasteboard.];
}
}
//二维码的扫描区域
- (void)setScanView
{
_scanView=[[UIViewalloc]
initWithFrame,
)];
_scanView.backgroundColor=[UIColorclearColor];
//最上部view
UIView* upView = [[UIViewalloc]
,,
VIEW_WIDTH,SCANVIEW_EdgeTop)];
upView.alpha =TINTCOLOR_ALPHA;
upView.backgroundColor = [UIColorblackColor];
[_scanViewaddSubview:upView];
//左側的view
UIView *leftView = [[UIViewalloc]
,SCANVIEW_EdgeTop,
SCANVIEW_EdgeLeft*SCANVIEW_EdgeLeft)];
leftView.alpha =TINTCOLOR_ALPHA;
leftView.backgroundColor = [UIColorblackColor];
[_scanViewaddSubview:leftView];
/******************中间扫描区域****************************/
UIImageView *scanCropView=[[UIImageViewalloc]
initWithFrame:CGRectMake(SCANVIEW_EdgeLeft,SCANVIEW_EdgeTop,
VIEW_WIDTH*SCANVIEW_EdgeLeft)];
//scanCropView.image=[UIImage imageNamed:@""];
scanCropView.layer.borderColor=[UIColorgetThemeColor].CGColor;
scanCropView.layer.borderWidth=2.0;
scanCropView.backgroundColor=[UIColorclearColor];
[_scanViewaddSubview:scanCropView];
//右側的view
UIView *rightView = [[UIViewalloc]
initWithFrame:CGRectMake(VIEW_WIDTH-SCANVIEW_EdgeLeft,SCANVIEW_EdgeTop,
SCANVIEW_EdgeLeft*SCANVIEW_EdgeLeft)];
rightView.alpha =TINTCOLOR_ALPHA;
rightView.backgroundColor = [UIColorblackColor];
[_scanViewaddSubview:rightView];
//底部view
UIView *downView = [[UIViewalloc]
*SCANVIEW_EdgeLeft+SCANVIEW_EdgeTop,VIEW_WIDTH,
VIEW_HEIGHT)];
//downView.alpha = TINTCOLOR_ALPHA;
downView.backgroundColor = [[UIColorblackColor]
colorWithAlphaComponent:TINTCOLOR_ALPHA];
[_scanViewaddSubview:downView];
//用于说明的label
UILabel *labIntroudction= [[UILabelalloc]
init];
labIntroudction.backgroundColor = [UIColorclearColor];
labIntroudction.,,
);
labIntroudction.;
labIntroudction.font=[UIFontsystemFontOfSize:15.0];
labIntroudction.textAlignment=NSTextAlignmentCenter;
labIntroudction.textColor=[UIColorwhiteColor];
labIntroudction.text=@"将二维码对准方框,就可以自己主动扫描";
[downViewaddSubview:labIntroudction];
UIView *darkView = [[UIViewalloc]
, downView.frame.size.height-100.0,VIEW_WIDTH,
100.0)];
darkView.backgroundColor = [[UIColorblackColor]
colorWithAlphaComponent:DARKCOLOR_ALPHA];
[downViewaddSubview:darkView];
//用于开关灯操作的button
UIButton *openButton=[[UIButtonalloc]
,,
300.0, 40.0)];
[openButtonsetTitle:@"开启闪光灯" forState:UIControlStateNormal];
[openButton setTitleColor:[UIColorwhiteColor]
forState:UIControlStateNormal];
openButton.titleLabel.textAlignment=NSTextAlignmentCenter;
openButton.backgroundColor=[UIColorgetThemeColor];
openButton.titleLabel.font=[UIFontsystemFontOfSize:22.0];
[openButton addTarget:selfaction:@selector(openLight)forControlEvents:UIControlEventTouchUpInside];
[darkViewaddSubview:openButton];
//画中间的基准线
_QrCodeline = [[UIViewalloc]
initWithFrame:CGRectMake(SCANVIEW_EdgeLeft,SCANVIEW_EdgeTop,
VIEW_WIDTH)];
_QrCodeline.backgroundColor = [UIColorgetThemeColor];
[_scanViewaddSubview:_QrCodeline];
}
- (void)openLight
{
)
{
;
}else
{
;
}
}
- (void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
)
{
;
}
[selfstopTimer];
[_readerViewstop];
}
//二维码的横线移动
- (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];
}elseif(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;
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
二维码框架ZBarSDK的使用和自己定义二维码扫描界面方法的更多相关文章
- 用c#开发微信(2)扫描二维码,用户授权后获取用户基本信息 (源码下载)
本文将介绍基于Senparc.Weixin微信开发框架来实现网页授权来获取用户基本信息.先生成包含授权及回调url信息的二维码:用户用微信扫描之后,被要求授权以获取Ta的用户基本信息:用户授权后,通过 ...
- ios二维码扫描插件,适配当前主流扫描软件,自定义扫描界面。
二维码介绍: 二维码(QR(Quick Response)code),又称二维条码,最早起源于日本. 它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息 ...
- Atitit 常用二维码对比(QR、PDF417、DM、汉信码 Aztec code maxicode
Atitit 常用二维码对比(QR.PDF417.DM.汉信码 Aztec code maxicode DM码则更"小",可在仅仅25mm²的面积上编码30个数字.但也就是因为太小 ...
- IOS开发小功能2:二维码扫描界面的设计(横线上下移动)
效果图如上,实现的是一个二维码扫描界面. 下面我贴出线条上下移动的代码,至于二维码的代码是用的第三方库. 首先是整体的结构: 注意下面的库文件一个都不能少,否则会报错. TLTiltHighlight ...
- java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例
java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍 我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream ou ...
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)
原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1) 提要:很多公司为商业宣传之需,常将企业LOGO加入二维码中,但如果LOGO遮挡区域足够地大,二维码就变得无法识别.那么,有没有一 ...
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)
原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) 续前:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1) http://blog.csdn.net/johnsu ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之四 组织机构管理源码分享
http://www.cnblogs.com/huyong/p/3404647.html 在上三篇文章 <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之三---角色管理源码分享
使用Jquery+EasyUI 进行框架项目开发案例讲解之三 角色管理源码分享 在上两篇文章 <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...
随机推荐
- mysql linux查看配置文件my.cnf位置
原文:mysql linux查看配置文件my.cnf位置 命令: mysql --help | grep 'Default options' -A 1
- Css学习总结(2)——60个有用CSS代码片段
1.垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,可以很优雅的解决这个困惑: .verticalcenter{ position: re ...
- Hbase读取数据
get命令和HTable类的get()方法用于从HBase表中读取数据.使用 get 命令,可以同时获取一行数据.它的语法如下: get ’<table name>’,’row1’ 下面的 ...
- WinServer-AD域控入门
计算机账户和用户账户的区别 域控中不需要事先建立计算机账户,但必须建立登录用户账户. 计算机只要知道域控管理员或者授权管理账户,就可以利用此账户为所有计算机加域. 计算机加域成功之后,都会在AD管理里 ...
- java io包File类
1.java io包File类, Java.io.File(File用于管理文件或目录: 所属套件:java.io)1)File对象,你只需在代码层次创建File对象,而不必关心计算机上真正是否存在对 ...
- JSON数据的生成与解析
JSON数据的生成与解析.首先先到网上下载一个json jar包,我用的是org.json 演示样例代码: package json; import org.json.JSONArray; impor ...
- 【面试】-Java基础知识
1.Java的工作原理 1) Java源程序(.java)须要通过编译器编译成字节码(.class)文件; 2) Java程序的跨平台主要指字节码能够在不论什么具有Java虚拟机的设备上运行: 3) ...
- UI自动化
1.下载安装JDK,配置环境变量 2.下载eclips,并安装 3.下载jskuli截图工具,并安装 4.下载Jspec插件,将其放在eclipse路径下的\plugins文件夹中.(打开eclips ...
- C++ STL之list具体解释
list容器是一个双向链表,能够高效地进行插入删除元素. 构造函数 list<Elem> c;//空list list<int> c(3);//创建一个含有三个默认值是0的元素 ...
- Ruby学习笔记(一)
在做实验的时候,由于每次都要手工修改文件夹的名字,实在是给自己添了太多的麻烦,为了摆脱手工修改的困恼,于是产生了一个使用程序批量修改文件夹名字的好主意.为了最终实现这个目标,自然需要选择一种合适的脚本 ...