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

原文地址:https://www.cnblogs.com/jiangshiyong/p/2534976.html