首先下载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