1.使用ZBar项目。下载地址是: http://zbar.sourceforge.net/iphone/index.html
2.新建一个项目。
3.导入 ZBar的sdk。把ZBar SDK的目录拉入项目,然后选中copy选项
4.在项目文件的target中加入 以下framework
5.在appDelegate文件中加入 标记部分的代码
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- {
- self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
- // Override point for customization after application launch.
- self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
- self.window.rootViewController = self.viewController;
- [self.window makeKeyAndVisible];
- // force view class to load so it may be referenced directly from NIB
- [ZBarReaderView class];
- return YES;
- }
注意此代码:
- // force view class to load so it may be referenced directly from NIB
- [ZBarReaderView class];
- //
- // ViewController.h
- // FootSafety
- //
- // Created by 泽宇 徐 on 12-6-12.
- // Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
- //
- #import <UIKit/UIKit.h>
- #import "ZBarSDK.h"
- @interface ViewController : UIViewController<ZBarReaderViewDelegate>
- {
- IBOutlet UILabel * label ;
- ZBarReaderView *readerView;
- ZBarCameraSimulator *cameraSim;
- }
- @property(nonatomic,retain) UILabel * label ;
- @property (nonatomic, retain) IBOutlet ZBarReaderView *readerView;
- @end
7.在.m文件中要实现的主要方法是:
- - (void) readerView: (ZBarReaderView*) view
- didReadSymbols: (ZBarSymbolSet*) syms
- fromImage: (UIImage*) img
- {
- // do something useful with results
- for(ZBarSymbol *sym in syms) {
- self.label.text = sym.data;
- break;
- }
- }
这里是功能是读取照片信息,把条码放如label显示
- -(void) viewDidAppear:(BOOL)animated
- {
- // run the reader when the view is visible
- [readerView start];
- }
这个是在显示视图的时候,启动摄像头,开始扫描
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- // the delegate receives decode results
- readerView.readerDelegate = self;
- // you can use this to support the simulator
- if(TARGET_IPHONE_SIMULATOR) {
- cameraSim = [[ZBarCameraSimulator alloc]
- initWithViewController: self];
- cameraSim.readerView = readerView;
- }
- }
在初始化的时候,设置托管。
.m文件所有内容是:
- //
- // ViewController.m
- // FootSafety
- //
- // Created by 泽宇 徐 on 12-6-12.
- // Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
- //
- #import "ViewController.h"
- @interface ViewController ()
- @end
- @implementation ViewController
- @synthesize label;
- @synthesize readerView;
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- // the delegate receives decode results
- readerView.readerDelegate = self;
- // you can use this to support the simulator
- if(TARGET_IPHONE_SIMULATOR) {
- cameraSim = [[ZBarCameraSimulator alloc]
- initWithViewController: self];
- cameraSim.readerView = readerView;
- }
- }
- -(void) viewDidAppear:(BOOL)animated
- {
- // run the reader when the view is visible
- [readerView start];
- }
- - (void) readerView: (ZBarReaderView*) view
- didReadSymbols: (ZBarSymbolSet*) syms
- fromImage: (UIImage*) img
- {
- // do something useful with results
- for(ZBarSymbol *sym in syms) {
- self.label.text = sym.data;
- break;
- }
- }
- - (void)viewDidUnload
- {
- [super viewDidUnload];
- // Release any retained subviews of the main view.
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
- }
- -(void) dealloc
- {
- [self.readerView release];
- [self.label release];
- [super dealloc];
- }
- @end
在ViewController.xib文件中 增加一个view,并且修改view的类是ZBarReaderView ,并且指向 .h文件中定义的
- ZBarReaderView *readerView;
转载地址:http://blog.youkuaiyun.com/remote_roamer/article/details/7657845
关于ZBarReaderView 自定义UI界面
-(void)scanClick:(id)sender
{
// [appDelegate runUI:VIEW_SCAN_VIEW];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
NSLog(@
" 跳转扫描扫描页面 "
);
if
(!self.zBarReaderView)
{
self.zBarReaderView = [ZBarReaderViewController
new
];
self.zBarReaderView.readerDelegate = self;
self.zBarReaderView.supportedOrientationsMask = ZBarOrientationMaskAll;
self.zBarReaderView.showsZBarControls = NO;
self.zBarReaderView.readerView.torchMode =
0
;
[self setOverlayPickerView:self.zBarReaderView];
ZBarImageScanner *scanner = self.zBarReaderView.scanner;
[scanner setSymbology: ZBAR_I25
config: ZBAR_CFG_ENABLE
to:
0
];
}
[self presentViewController:self.zBarReaderView
animated:YES
completion:^(
void
)
{
// Code
NSLog(@
"弹出。。。。"
);
}];
|
}
/**
-
扫条形码结果
**/ -
(void) imagePickerController: (UIImagePickerController) reader
didFinishPickingMediaWithInfo: (NSDictionary) info
{
id results =
[info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)1break
;
//判断是否包含 头'http:'
NSString regex = @“http+:[^\s]“;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@“SELF MATCHES %@“,regex];//判断是否包含 头'ssid:'
NSString ssid = @“ssid+:[^\s]“;;
NSPredicate ssidPre = [NSPredicate predicateWithFormat:@“SELF MATCHES %@“,ssid];
NSString dataStr = symbol.data ;
NSLog(@“ssidPre %@“, ssidPre);
NSLog(@“predicate %@“, predicate);
NSLog(@“dataStr %@“, dataStr);[self performSelector:@selector(disposeViewControl) withObject:FALSE afterDelay:5.0];
}
/*
关闭页面
*/
-(void)disposeViewControl
{
1
2
3
4
5
6
|
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:
@selector
(disposeViewControl) object:nil];
[self dismissViewControllerAnimated:YES
completion:^(
void
)
{
NSLog(@
"消失~~ "
);
}];
|
}
-
(void)setOverlayPickerView:(ZBarReaderViewController *)reader
{//清除所有内容
for (UIView *temp in [reader.view subviews])
{12345678910111213141516for
(UIButton *button in [temp subviews])
{
if
([button isKindOfClass:[UIButton
class
]])
{
[button removeFromSuperview];
}
}
for
(UIToolbar *toolbar in [temp subviews])
{
if
([toolbar isKindOfClass:[UIToolbar
class
]])
{
[toolbar setHidden:YES];
[toolbar removeFromSuperview];
}
}
}
//TITLE_HEIGHT : 64 头部高度
tmpHeight = appDelegate.mainRootView.getRootHeight - 3TITLE_HEIGHT;
tmpWidth = appDelegate.mainRootView.getRootWidth - 30;
//最上部view
UIView upView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, appDelegate.mainRootView.getRootWidth, TITLE_HEIGHT)];
upView.alpha = 0.4;
upView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:upView];//左侧的view
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, TITLE_HEIGHT, 15, tmpHeight)];
leftView.alpha = 0.4;
leftView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:leftView];//右侧的view
UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(appDelegate.mainRootView.getRootWidth - 15, TITLE_HEIGHT, 15, tmpHeight)];
rightView.alpha = 0.4;
rightView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:rightView];//底部view
UIView * downView = [[UIView alloc] initWithFrame:CGRectMake(0, tmpHeight + TITLE_HEIGHT, appDelegate.mainRootView.getRootWidth, 2*TITLE_HEIGHT)];
downView.alpha = 0.4;
downView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:downView];//最上层的操作 左边
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(15, 24, 30, 30);
[button setBackgroundImage:[UIImage imageNamed:@“ocrBack”] forState:UIControlStateNormal];
[button addTarget:self action:@selector(leftClick:) forControlEvents:UIControlEventTouchUpInside];
[reader.view addSubview:button];//右边
UIButton * buttonRight = [UIButton buttonWithType:UIButtonTypeCustom];
buttonRight.frame= CGRectMake(appDelegate.mainRootView.getRootWidth - 45, 24, 30, 30);
[buttonRight setBackgroundImage:[UIImage imageNamed:@“ocr_flash_off”] forState:UIControlStateNormal];
[buttonRight addTarget:self action:@selector(rightClick:) forControlEvents:UIControlEventTouchUpInside];
[reader.view addSubview:buttonRight];//用于说明的label
UILabel * labIntroudction= [[UILabel alloc] init];
labIntroudction.backgroundColor = [UIColor clearColor];
labIntroudction.frame=CGRectMake(0, 20, downView.frame.size.width, 50);
labIntroudction.numberOfLines=2;
labIntroudction.textColor=[UIColor whiteColor];
labIntroudction.textAlignment = NSTextAlignmentCenter;
labIntroudction.text=@“将二维码/条形码放入扫描框内\n自动识别不安全连接,请放心扫描”;
[downView addSubview:labIntroudction];//4个角
//左上
UIImageView *leftUp=[[UIImageView alloc] initWithFrame:CGRectMake(13, TITLE_HEIGHT-2, 19, 19)];
[leftUp setImage:[UIImage imageNamed:@“scan_1”]];
[reader.view addSubview:leftUp];//右上
UIImageView rightUp=[[UIImageView alloc] initWithFrame:CGRectMake(appDelegate.mainRootView.getRootWidth-13-19, TITLE_HEIGHT-2, 19, 19)];
[rightUp setImage:[UIImage imageNamed:@“scan_2”]];
[reader.view addSubview:rightUp];
//左下
UIImageView leftDown=[[UIImageView alloc] initWithFrame:CGRectMake(13, TITLE_HEIGHT+tmpHeight-15, 19, 19)];
[leftDown setImage:[UIImage imageNamed:@“scan_3”]];
[reader.view addSubview:leftDown];
//右下
UIImageView *rightDown=[[UIImageView alloc] initWithFrame:CGRectMake(appDelegate.mainRootView.getRootWidth-13-19, TITLE_HEIGHT+tmpHeight-15, 19, 19)];
[rightDown setImage:[UIImage imageNamed:@“scan_4”]];
[reader.view addSubview:rightDown];//滑动
num =0;
UIImage *image =[UIImage imageNamed:@“scan_net”];
NSLog(@“image %f”, image.size.height);
NSLog(@“image %f”, image.size.width);
startY= TITLE_HEIGHT;
scanNet = [[UIImageView alloc] initWithFrame:CGRectMake(15, startY, tmpWidth, tmpHeight)];
scanNet.image = image;
[reader.view addSubview:scanNet];
// scanNet.layer.borderColor = [UIColor redColor].CGColor;
// scanNet.layer.borderWidth = 1.0f;
timer = [NSTimer scheduledTimerWithTimeInterval:.02 target:self selector:@selector(animation1) userInfo:nil repeats:YES];
}
-(void)animation1
{
1
2
3
4
5
6
|
num ++;
scanNet.frame = CGRectMake(scanNet.frame.origin.x, startY, scanNet.frame.size.width,
2
*num);
if
(
2
*num == tmpHeight)
{
num =
0
;
}
|
}
-(void) leftClick:(id)sender
{
1
|
[self disposeViewControl];
|
}
-(void) rightClick:(id)sender
{
1
2
3
4
5
6
7
8
9
10
11
|
UIButton *btn = (UIButton *)sender;
if
(btn.selected)
{
btn.selected = NO;
self.zBarReaderView.readerView.torchMode =
0
;
}
else
{
btn.selected = YES;
self.zBarReaderView.readerView.torchMode =
1
;
}
|
}
转载地址:http://my.oschina.net/coper/blog/298438
ZBarReaderView使用:
ZBar为我们提供了两种使用方式,一种是直接调用ZBar提供的ZBarReaderViewController
ZBar使用起来也非常简单,将ZBarSDK导入项目,在需要使用ZBar的文件中导入ZBarSDK.h头文件即可,以下是ZBarReaderView的初始化方法:
readerView.frame
readerView.readerDelegate
//关闭闪光灯
readerView.torchMode
//扫描区域
CGRectscanMaskRect
//处理模拟器
if
}
[self.view addSubview:readerView];
//扫描区域计算
readerView.scanCrop
[readerView start];
以上代码需要说明的有以下几点:
- 闪光灯设置
我不希望在扫描二维码时开启闪光灯,所以将ZBarReaderView的torchMode设为0,你可以将它设置为其他任何合适的值。 - 扫描区域计算
这点比较重要,我们常用的二维码扫描软件的有效扫描区域一般都是中央区域,其他部分是不进行扫描的,ZBar可以通过ZBarReaderView的scanCrop属性设置扫描区域,它的默认值是CGRect(0,0, 1,1),表示整个ZBarReaderView区域都是有效的扫描区域。我们需要把扫描区域坐标计算为对应的百度分数坐标,也就是以上代码中调用的getScanCrop:readerViewBounds方法,亲测没有问题,如下所示:
{
}
PS:在网上找到很多这个方法都是将横坐标和纵坐标交叉,这样是有问题的,仔细想一下就会明白。
初始化部分完成之后,就可以调用ZBarReaderView的start方法开始扫描了,需要让你的类实现ZBarReaderViewDelegate协议,在扫描到二维码时会调用delegate的对应方法。最后,当二维码已经识别时候,可以调用ZBarReaderView的stop方法停止扫描。如下所示:
{
}