二维码框架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];

_readerView.frame =CGRectMake(0,64,
VIEW_WIDTH, VIEW_HEIGHT -64);

_readerView.tracksSymbols=NO;

_readerView.readerDelegate =self;

[_readerViewaddSubview:_scanView];

//关闭闪光灯

_readerView.torchMode =0;

[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:@";"];

NSArray * arrInfoHead = [[arrobjectAtIndex:0]componentsSeparatedByString:@":"];

NSArray * arrInfoFoot = [[arrobjectAtIndex:1]componentsSeparatedByString:@":"];

symbolStr = [NSStringstringWithFormat:@"ssid:
%@ \n password:%@",

[arrInfoHeadobjectAtIndex:1],[arrInfoFootobjectAtIndex:1]];

UIPasteboard *pasteboard=[UIPasteboardgeneralPasteboard];

//然后,可以使用如下代码来把一个字符串放置到剪贴板上:

pasteboard.string = [arrInfoFootobjectAtIndex:1];

}

}

//二维码的扫描区域

- (void)setScanView

{

_scanView=[[UIViewalloc]
initWithFrame:CGRectMake(0,0,
VIEW_WIDTH,VIEW_HEIGHT-64)];

_scanView.backgroundColor=[UIColorclearColor];

//最上部view

UIView* upView = [[UIViewalloc]
initWithFrame:CGRectMake(0,0,
VIEW_WIDTH,SCANVIEW_EdgeTop)];

upView.alpha =TINTCOLOR_ALPHA;

upView.backgroundColor = [UIColorblackColor];

[_scanViewaddSubview:upView];

//左侧的view

UIView *leftView = [[UIViewalloc]
initWithFrame:CGRectMake(0,SCANVIEW_EdgeTop,
SCANVIEW_EdgeLeft,VIEW_WIDTH-2*SCANVIEW_EdgeLeft)];

leftView.alpha =TINTCOLOR_ALPHA;

leftView.backgroundColor = [UIColorblackColor];

[_scanViewaddSubview:leftView];

/******************中间扫描区域****************************/

UIImageView *scanCropView=[[UIImageViewalloc]
initWithFrame:CGRectMake(SCANVIEW_EdgeLeft,SCANVIEW_EdgeTop,
VIEW_WIDTH-2*SCANVIEW_EdgeLeft,VIEW_WIDTH-2*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,VIEW_WIDTH-2*SCANVIEW_EdgeLeft)];

rightView.alpha =TINTCOLOR_ALPHA;

rightView.backgroundColor = [UIColorblackColor];

[_scanViewaddSubview:rightView];

//底部view

UIView *downView = [[UIViewalloc]
initWithFrame:CGRectMake(0,VIEW_WIDTH-2*SCANVIEW_EdgeLeft+SCANVIEW_EdgeTop,VIEW_WIDTH,
VIEW_HEIGHT-(VIEW_WIDTH-2*SCANVIEW_EdgeLeft+SCANVIEW_EdgeTop)-64)];

//downView.alpha = TINTCOLOR_ALPHA;

downView.backgroundColor = [[UIColorblackColor]
colorWithAlphaComponent:TINTCOLOR_ALPHA];

[_scanViewaddSubview:downView];

//用于说明的label

UILabel *labIntroudction= [[UILabelalloc]
init];

labIntroudction.backgroundColor = [UIColorclearColor];

labIntroudction.frame=CGRectMake(0,5,
VIEW_WIDTH,20);

labIntroudction.numberOfLines=1;

labIntroudction.font=[UIFontsystemFontOfSize:15.0];

labIntroudction.textAlignment=NSTextAlignmentCenter;

labIntroudction.textColor=[UIColorwhiteColor];

labIntroudction.text=@"将二维码对准方框,即可自动扫描";

[downViewaddSubview:labIntroudction];

UIView *darkView = [[UIViewalloc]
initWithFrame:CGRectMake(0, downView.frame.size.height-100.0,VIEW_WIDTH,
100.0)];

darkView.backgroundColor = [[UIColorblackColor] 
colorWithAlphaComponent:DARKCOLOR_ALPHA];

[downViewaddSubview:darkView];

//用于开关灯操作的button

UIButton *openButton=[[UIButtonalloc]
initWithFrame:CGRectMake(10,20,
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-2*SCANVIEW_EdgeLeft,2)];

_QrCodeline.backgroundColor = [UIColorgetThemeColor];

[_scanViewaddSubview:_QrCodeline];

}

- (void)openLight

{

if (_readerView.torchMode ==0)
{

_readerView.torchMode =1;

}else

{

_readerView.torchMode =0;

}

}

- (void)viewWillDisappear:(BOOL)animated

{

[superviewWillDisappear:animated];

if (_readerView.torchMode ==1)
{

_readerView.torchMode =0;

}

[selfstopTimer];

[_readerViewstop];

}

//二维码的横线移动

- (void)moveUpAndDownLine

{

CGFloat Y=_QrCodeline.frame.origin.y;

//CGRectMake(SCANVIEW_EdgeLeft, SCANVIEW_EdgeTop, VIEW_WIDTH-2*SCANVIEW_EdgeLeft, 1)]

if (VIEW_WIDTH-2*SCANVIEW_EdgeLeft+SCANVIEW_EdgeTop==Y){

[UIView beginAnimations:@"asa" context:nil];

[UIView setAnimationDuration:1];

_QrCodeline.frame=CGRectMake(SCANVIEW_EdgeLeft, SCANVIEW_EdgeTop, VIEW_WIDTH-2*SCANVIEW_EdgeLeft,1);

[UIView commitAnimations];

}elseif(SCANVIEW_EdgeTop==Y){

[UIView beginAnimations:@"asa" context:nil];

[UIView setAnimationDuration:1];

_QrCodeline.frame=CGRectMake(SCANVIEW_EdgeLeft, VIEW_WIDTH-2*SCANVIEW_EdgeLeft+SCANVIEW_EdgeTop, VIEW_WIDTH-2*SCANVIEW_EdgeLeft,1);

[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

时间: 2024-09-30 23:27:53

二维码框架ZBarSDK的使用和自定义二维码扫描界面方法的相关文章

二维码框架ZBarSDK的使用和自己定义二维码扫描界面方法

假设你不知道ZBarSDK怎么用,请下载demo http://download.csdn.net/detail/u013686641/7858917 假设你已经配置好ZBarSDK .那么以下这个类能够直接用 以下是效果图 // //  头文件 //  TestProject // #import <UIKit/UIKit.h> #import "ZBarSDK.h" @interface yxpQrCode :UIViewController @end // //  实

iOS 开发之 ZBarSDK 二维码扫描自定义二维码扫描页面(二)

iOS 开发之 ZBarSDK 二维码扫描自定义二维码扫描页面(二) 上一篇解决了ZBarSDK不支持64bit的问题,下面我们就可以使用ZBarSDK了. 导入ZBarSDk.h文件 附上代码: // //  MeViewController.m //  Auditory Blog // //  Created by 寒竹子 on 15/4/28. //  Copyright (c) 2015年 寒竹子. All rights reserved. // #define ScanWidth  2

iOS中使用ZBar扫描二维码自定义扫描界面

之前在Android中使用过ZXing识别二维码,ZXing也有对应的iOS版本,经过了解,ZBar也是一个常用的二维码识别软件,并分别提供了iOS和Android的SDK可供使用,最终我选择了ZBar进行二维码识别,它的注释清晰,便于使用. ZBar为我们提供了两种使用方式,一种是直接调用ZBar提供的ZBarReaderViewController打开一个扫描界面,另一种方式是使用ZBar提供的可以嵌在其他视图中的ZBarReaderView,实际项目中我们更可能会使用第二种方式,这可以让我

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 SCANVI

教你不扫二维码不查找公众账号就能一键关注公众账号的方法

第一步:先设置广告编辑 第二步:选择广告模式和微信一键关注 这张图设置好后,需要打印张贴在店里引导客人上网. 上网方法: 1.  手机线连接wifi 2.  打开危险性朋友圈点击任意分线箱连接或扫一扫二维码 3.  点击一键关注 手机端操作: 1.连接wifi 2.打开微信——朋友圈 3.点击任意分享连接 4.出现一键关注界面 5.点击关注 6.点击确定 最后跳转到分享连接内容 现在手机的网络已经完全打开 教你不扫二维码不查找公众账号就能一键关注公众账号的方法,布布扣,bubuko.com

Android的二维码功能实现以及长按识别二维码

一.初步集成Zxing项目 二维码的识别可是在生活中随处可见的,现在基本上所有APP都有二维码的相关操作,如果识别二维码从头开始开发做起来还是相当复杂和麻烦的,从零开始开发肯定不现实,最好的做法就是借助现有的开源项目,Github上名气最大的就是Zxing了,提供了多个平台的二维码扫码解决方案,开源项目地址是:https://github.com/zxing/zxing,我们今天集成Zxing到我们自己的项目中去,并实现一些二维码生成.扫描.长按识别二维码等相关操作: 1.下载Zxing项目所依

自定义ZXing二维码扫描界面并解决取景框拉伸等问题

先看效果 扫描内容是下面这张,二维码是用zxing库生成的 由于改了好几个类,还是去年的事都忘得差不多了,所以只能上这个类的代码了,主要就是改了这个CaptureActivity.java 1 package com.zxing.activity; 2 3 import java.io.IOException; 4 import java.util.Vector; 5 6 import android.app.Activity; 7 import android.content.Intent;

4种方法生成二维码 (js 控制canvas 画出 二维码)

随着网络的迅速发展 发展 发展,二维码的应用将会越来越多.同时很多只是很平凡的二维码,请拿起你的手 把这个二维码 设计起来吧.下面分享了几个非常好的二维码设计.  二维码原理: 二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码. 堆叠式/行排式二维条码形态上是由多行短截的一维5条码堆叠而成:矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用“点”表示二进制“1”, 用“空”表示二进制“0”,“点”和“空”的排列组成代码. 最近对二维码产生了兴趣 研究了一下二维码 这里生出的术语

ThoughtWorks.QRCode 生成QR二维码时提示“索引超出了数组界限”的原因和解决方法

"索引超出了数组界限"也有可能确实是因为你选择的二维码Version对应的容量不足以存储你所放的内容,如果你确定使用的版本容量二维码能存储你的内容,但还是报错,那么再考虑此解决方法 这两天忙着做一个客户标签打印程序,因为二维码里面存在控制符,使用ZPL指令存在一些问题,因此决定使用生成二维码图片然后转换成ZPL格式图片来打印.途中找了很多类库,很多都无法自定义QR的version而放弃,转而找到ThoughtWorks.QRCode.dll,效果很满意,但是测试的时候发现经常会提示&q