zoukankan      html  css  js  c++  java
  • 二维码框架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: %@ 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 = [[UIColorblackColorcolorWithAlphaComponent: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



  • 相关阅读:
    【2020省选Day1T1】LOJ3299 「联合省选 2020 A | B」冰火战士
    题解 CF1369 D,E,F Codeforces Round #652 (Div. 2)
    题解 LOJ3298 「BJOI2020」封印(SAM,数据结构)
    题解 nflsoj99 牛顿的烈焰激光剑(容斥,DP,数学)
    判断长度为3的等差数列(经典问题)
    树形图求和:一道经典矩阵知识题
    题解 LOJ2390 「JOISC 2017 Day 1」开荒者
    istio sidecar自动注入过程分析
    filebeat-kafka日志收集
    istio路由配置
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5193724.html
Copyright © 2011-2022 走看看