zoukankan      html  css  js  c++  java
  • Zbar的使用隐藏toolbar及图片作为扫描页面边框

    首先下载ZBarSDK,静态库libzbar.a我是取现成已经编译好的。

    下面是代码的实现:

    1.  CommodityDetailsViewController.h 文件


    #import <UIKit/UIKit.h>
    #import "ZBarReaderViewController.h"

    #import "CommodityDetailsViewController.h"

    @interface SearchViewCommon : UIViewController<ZBarReaderDelegate> {
        
        ZBarReaderViewController *reader;


        UIButton                 *backBtn;
        UIToolbar                 *toolBar;

    }

    - (IBAction)scanPressed;//扫描事件

    @end

    CommodityDetailsViewController.m文件



    @implementation SearchViewCommon


    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            
            toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 520, 320, 0)];
            [toolBar setBarStyle:UIBarStyleBlackTranslucent];
            backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
            backBtn.frame = CGRectMake(140,480-125, 51, 51);
            //backBtn.frame= CGRectMake(0, 480-44,230, 44);
            [backBtn addTarget:self action:@selector(dismissReader) forControlEvents:UIControlEventTouchUpInside];
            UIImage *image_back = [UIImage imageNamed:@"QR_return(320).png"];
            [backBtn setBackgroundImage:image_back forState:UIControlStateNormal];
            [toolBar addSubview:backBtn];
        }
        return self;
    }


    - (void)viewDidLoad {
        
        [super viewDidLoad];
    }


    #pragma mark -
    #pragma mark  二维码扫描
    - (IBAction)scanPressed {
        
        [OcjStatusUtility hidesTabBar:YES animated:YES ];
        

        reader = [[ZBarReaderViewController alloc]init];
        reader.view.frame = CGRectMake(0, 0, 320, 480);
        
        reader.showsZBarControls = NO;
        reader.enableCache = YES;
        toolBar.frame  = CGRectMake(0, 500, 320, 0);
        
        for (UIView *temp in [reader.view subviews]) {
            
            for (UIButton *button in [temp subviews]) {
                if ([button isKindOfClass:[UIButton class]]) {
                    
                    [button removeFromSuperview];
                    
                }
            }

    //        for (UITabBar *tabbar in [temp subviews]) {
    //            
    //            if ([tabbar isKindOfClass:[UITabBar class]]) {
    //                
    //                [tabbar setHidden:YES];
    //                [tabbar removeFromSuperview];
    //                
    //            }
    //            
    //        }
            
            for (UIToolbar *toolbar in [temp subviews]) {   //循环遍历给力
                
                if ([toolbar isKindOfClass:[UIToolbar class]]) {
                    
                    [toolbar setHidden:YES];
                }
            }
        }

        if ([kIphoneVersion floatValue]>4.4) { //经过测试ios版本底的情况下不能直接套用图片,使用边框效果只能自己画上去个线条(view替代,并设置                                                               //透明度)。
            UIView *bgview = [[UIView alloc] initWithFrame:CGRectMake(28, 70, 267, 268)];
            //bgview.alpha = 0.3;
            bgview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"QR_bg(320).png"]];
            [reader.view addSubview:bgview];
            [bgview release];
            
            UILabel * labIntroudction= [[UILabel alloc] init];
            labIntroudction.backgroundColor = [UIColor clearColor];
            labIntroudction.frame=CGRectMake(15, 20, 290, 50);
            labIntroudction.numberOfLines=2;
            labIntroudction.font=kFontNameTwo;
            labIntroudction.textColor=[UIColor whiteColor];
            labIntroudction.text=@"将二维码图像置于矩形外,离手机摄像头10CM左右,软件会自动识别。";
            [reader.view addSubview:labIntroudction];
            [labIntroudction release];
        }else {
            
            UIView* line = [[UIView alloc] initWithFrame:CGRectMake(60, 240, 200, 1)];
            line.backgroundColor = [UIColor redColor];
            [reader.view addSubview:line];
            [line release];
            
            UIView* upView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];
            upView.alpha = 0.3;
            upView.backgroundColor = [UIColor blackColor];
            [reader.view addSubview:upView];
            
            UILabel * labIntroudction= [[UILabel alloc] init];
            labIntroudction.backgroundColor = [UIColor clearColor];
            labIntroudction.frame=CGRectMake(15, 20, 290, 50);
            labIntroudction.numberOfLines=2;
            labIntroudction.font=kFontNameTwo;
            labIntroudction.textColor=[UIColor whiteColor];
            labIntroudction.text=@"将二维码图像置于矩形外,离手机摄像头10CM左右,软件会自动识别。";
            [upView addSubview:labIntroudction];
            [labIntroudction release];
            [upView release];
            
            UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 80, 37, 232)];
            leftView.alpha = 0.3;
            leftView.backgroundColor = [UIColor blackColor];
            [reader.view addSubview:leftView];
            [leftView release];
            
            UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(288, 80, 37, 232)];
            rightView.alpha = 0.3;
            rightView.backgroundColor = [UIColor blackColor];
            [reader.view addSubview:rightView];
            [rightView release];
            
            
            UIView * downView = [[UIView alloc] initWithFrame:CGRectMake(0, 312, 320, 120)];
            downView.alpha = 0.3;
            downView.backgroundColor = [UIColor blackColor];
            //[downView addSubview:backBtn];
            [reader.view addSubview:downView];
            [downView release];
            
        }
        
        [reader.view addSubview:backBtn];
        [self.fatherViewController presentModalViewController: reader
                                                     animated: YES];
        reader.readerDelegate = self;
        reader.supportedOrientationsMask = UIInterfaceOrientationPortrait;
        reader.showsZBarControls = NO;
        

        ZBarImageScanner *scanner = reader.scanner;
        // TODO: (optional) additional reader configuration here
        
        // EXAMPLE: disable rarely used I2/5 to improve performance
        [scanner setSymbology: ZBAR_I25
                       config: ZBAR_CFG_ENABLE
                           to: 0];
        
        // present and release the controller

        //[reader release];
        
    }

    #pragma mark -
    #pragma mark 以下是将扫描部分代码整合

    -(void)dismissReader {
        
        [toolBar removeFromSuperview];
       // [OcjStatusUtility hidesTabBar:NO animated:YES];
        [reader dismissModalViewControllerAnimated:YES];
    }

    #pragma mark -
    #pragma mark - ZBarDelegate

    - (void) imagePickerController: (UIImagePickerController*) reader
     didFinishPickingMediaWithInfo: (NSDictionary*) info
    {
        
        // ADD: get the decode results
        id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
        ZBarSymbol *symbol = nil;
        for(symbol in results)
            // EXAMPLE: just grab the first barcode
            break;
        
        // EXAMPLE: do something useful with the barcode data
        NSString *str = [NSString stringWithFormat:@"%@",symbol.data];

        [self.shoppingCarDao qRCodeScanning:str];//得到扫描的字符串 str;
        
        //    NSString* sknStr = [[[NSString alloc] initWithString:symbol.data] autorelease];
        //    [self performSelector:@selector(saveScanKey:) withObject:sknStr];
        //    [self performSelector:@selector(requestData:) withObject:sknStr];
        
        //    // EXAMPLE: do something useful with the barcode image
        //    resultImage.image = [info objectForKey: UIImagePickerControllerOriginalImage];
        //    backgroundView.hidden = YES;
        //    resultImage.hidden = NO;
        
        // ADD: dismiss the controller (NB dismiss from the *reader*!)
        
        //[reader dismissModalViewControllerAnimated:YES];
    }



    - (void) imagePickerControllerDidCancel: (UIImagePickerController*) reader
    {
            //[reader dismissModalViewControllerAnimated: YES];
    }

    - (void) readerControllerDidFailToRead: (ZBarReaderController*) reader
                                 withRetry: (BOOL) retry
    {

        //if(!retry)
        //[reader dismissModalViewControllerAnimated: YES];
    }


    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];
    }

    - (void)viewDidUnload {

    }
    - (void)dealloc {

        [super dealloc];
    }

    @end

  • 相关阅读:
    MySQL Community Server 8.0.16
    Python的编码规范
    Python 的语言特性
    spark笔记 环境配置
    C#委托实现工厂规则注入
    特性与元数据
    可输入的模糊搜索ComBox控件
    ASPX页面输出datatable的一种方法
    QRcode生成二维码,保存二维码图片到服务器
    SQL语句的随机值与行号,字符串拼接
  • 原文地址:https://www.cnblogs.com/jiangshiyong/p/2534976.html
Copyright © 2011-2022 走看看