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

转载 2015年07月08日 12:41:27
如果你不知道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,64VIEW_WIDTHVIEW_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 = [NSStringstringWithUTF8Stringzbar_symbol_get_data(symbol)];

    

    //判断是否包含 头'http:'

    NSString *regex =@"http+:[^\\s]*";

   NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",regex];

    

    

    UIAlertView *alertView=[[UIAlertViewallocinitWithTitle:@""message:symbolStrdelegate: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=[[UIViewallocinitWithFrame:CGRectMake(0,0VIEW_WIDTH,VIEW_HEIGHT-64)];

    _scanView.backgroundColor=[UIColorclearColor];

    

    //最上部view

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

    upView.alpha =TINTCOLOR_ALPHA;

    upView.backgroundColor = [UIColorblackColor];

    [_scanViewaddSubview:upView];

    

    //左侧的view

    UIView *leftView = [[UIViewallocinitWithFrame: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_EdgeTopVIEW_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 = [[UIViewallocinitWithFrame:CGRectMake(VIEW_WIDTH-SCANVIEW_EdgeLeft,SCANVIEW_EdgeTopSCANVIEW_EdgeLeft,VIEW_WIDTH-2*SCANVIEW_EdgeLeft)];

    rightView.alpha =TINTCOLOR_ALPHA;

    rightView.backgroundColor = [UIColorblackColor];

    [_scanViewaddSubview:rightView];

    

    

    //底部view

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

    //downView.alpha = TINTCOLOR_ALPHA;

    downView.backgroundColor = [[UIColorblackColorcolorWithAlphaComponent:TINTCOLOR_ALPHA];

    [_scanViewaddSubview:downView];

    

    //用于说明的label

   UILabel *labIntroudction= [[UILabelallocinit];

    labIntroudction.backgroundColor = [UIColorclearColor];

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

    labIntroudction.numberOfLines=1;

    labIntroudction.font=[UIFontsystemFontOfSize:15.0];

    labIntroudction.textAlignment=NSTextAlignmentCenter;

    labIntroudction.textColor=[UIColorwhiteColor];

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

    [downViewaddSubview:labIntroudction];

    

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

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

    [downViewaddSubview:darkView];

    

    //用于开关灯操作的button

   UIButton *openButton=[[UIButtonallocinitWithFrame:CGRectMake(10,20300.040.0)];

    [openButtonsetTitle:@"开启闪光灯" forState:UIControlStateNormal];

    [openButton setTitleColor:[UIColorwhiteColorforState:UIControlStateNormal];

    openButton.titleLabel.textAlignment=NSTextAlignmentCenter;

    openButton.backgroundColor=[UIColorgetThemeColor];

    openButton.titleLabel.font=[UIFontsystemFontOfSize:22.0];

    [openButton addTarget:selfaction:@selector(openLight)forControlEvents:UIControlEventTouchUpInside];

    [darkViewaddSubview:openButton];

    

    //画中间的基准线

    _QrCodeline = [[UIViewallocinitWithFrame:CGRectMake(SCANVIEW_EdgeLeft,SCANVIEW_EdgeTopVIEW_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



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

这是一个基于ZBarSDK的二维码扫描,完全自定义界面,简单实用,漂亮

iOS 扫描二维码(ZBarSDK)遇到的坑~解决方法

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 一、用 ZBarSDK 做扫描二维码 导入的库文件 图1: 二、导入ZBarSDK 第三方框架 会出现此错误: ...

iOS 使用ZBarSDK扫描条形码和二维码

ZBarSDK,一个比较优秀的开源项目,使用起来也很简单。 ZBarSDK是一个开源的SDK,可从这里下载到源码,该SDK实现了识别和读取各种条形码,包括EAN-13/UPC-A, UP...

二维码扫描ZBarSDK的使用

1.使用ZBar项目。下载地址是: http://zbar.sourceforge.net/iphone/index.html 2.新建一个项目。 3.导入 ZBar的sdk。把ZBar ...
  • nyh1006
  • nyh1006
  • 2014年09月18日 22:43
  • 919

Zxing自定义界面的二维码扫描

  • 2017年06月28日 09:24
  • 483KB
  • 下载

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

之前在Android中使用过ZXing识别二维码,ZXing也有对应的iOS版本,经过了解,ZBar也是一个常用的二维码识别软件,并分别提供了iOS和Android的SDK可供使用,最终我选择了ZBa...

使用ZbarSDK扫描二维码时乱码情况解决(解决乱码)

在我的项目中是这样用的,只要加上这句就行: NSString *textd = symbol.data;    //解决中文乱码问题    if ([textd canBeConvertedToEn...

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

之前在Android中使用过ZXing识别二维码,ZXing也有对应的iOS版本,经过了解,ZBar也是一个常用的二维码识别软件,并分别提供了iOS和Android的SDK可供使用,最终我选择了ZBa...

iOS端使用二维码扫描(ZBarSDK)和生成(libqrencode)功能

如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影。手机中二维码使用也很广泛,如微信等。正好最近项目中使用了二维码功能,此文为博主原创技术总结,转载注明出处:http://blog.c...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二维码框架ZBarSDK的使用和自定义二维码扫描界面方法
举报原因:
原因补充:

(最多只允许输入30个字)