二维码扫描(话说博主在项目中写成“扫瞄”被测试bs了一把),这种技术现在运用越来越广泛,在此我把自己在项目中的运用技巧和注意的地方做一下介绍.
一、选择库(我选择的是zbarsdk)
需要注意的地方,在用svn协同开发的时候,zbar中的libzbar.a静态库需要检查是否上传到代码库,否则需要单独手动添加。
二、创建扫描控制器或者视图
#import <UIKit/UIKit.h>
#import "ZBarSDK.h"
#import <AVFoundation/AVFoundation.h>
@class ShoppinginfoViewController;
@interface ScanCoderViewController
: ZBarReaderViewController<ZBarReaderDelegate,UIAlertViewDelegate>
@property(retain,nonatomic)ShoppinginfoViewController *shooppingVC;
@property(retain,nonatomic)UILabel *m_resultLab;
@property(retain,nonatomic)UIImageView *m_imageview;
@end
在这里我是直接继承ZBarReaderViewController
其中有很多属性可以扩展,例如
CGRect rect=[UIScreen mainScreen].bounds;
[self.readerView setFrame:rect];
self.readerView.backgroundColor=[UIColor clearColor];
readerView则是扫描二维码的视图,已是库中ZBarReaderViewController 的一个属性
三、自定义扫描窗口
1去掉库中自带的toolbar
int i = 0;
for (UIView *tempview in self.view.subviews )
{
NSLog(@"%f",tempview.frame.size.height);
if (i==1)
{
[tempview setHidden:YES];
}
i++;
}
2添加扫描说明
CGRect rect = [UIScreen mainScreen].bounds;
UILabel * labIntroudction= [[UILabel alloc] init];
labIntroudction.backgroundColor = [UIColor clearColor];
labIntroudction.frame=CGRectMake(self.readerView.center.x-95, self.readerView.center.y+70,200, 50);
labIntroudction.numberOfLines=2;
labIntroudction.font=[UIFont systemFontOfSize:12.0f];
labIntroudction.textColor=[UIColor whiteColor];
labIntroudction.text=@"将二维码图像置于取景框内,\n即可自动扫瞄。";
labIntroudction.textAlignment=NSTextAlignmentCenter;
[self.view addSubview:labIntroudction];
[labIntroudction release];
3启动扫描
[self.readerView start];
四、继承代理协议
这个方法为代理方法,实现扫描后从二维码中获取信息,最终显示
- (void) imagePickerController:
(UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
{
id<</span>NSFastEnumeration>
results =
[info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
break;
_m_imageview.image =
[info objectForKey: UIImagePickerControllerOriginalImage];
self.m_resultLab.text = symbol.data ;
NSString *string=[NSString stringWithFormat:@"扫描卡号:%@",self.m_resultLab.text];
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:nil
message:string
delegate:nil
cancelButtonTitle:@"Close"
otherButtonTitles:@"Ok", nil];
alert.delegate = self;
alert.tag=1;
[alert show];
[alert release];
停止扫描
[self.readerView stop];
}
五、扩展加在扫描边框和扫描线条
- (void)viewDidLoad
{
[super viewDidLoad];
_m_timer=[NSTimer timerWithTimeInterval:5.0f target:self selector:@selector(nilSymbol)userInfo:nil repeats:YES];
CGRect rect=[UIScreen mainScreen].bounds;
[self.readerView setFrame:rect];
self.readerView.backgroundColor=[UIColor clearColor];
UIImageView *line=[[UIImageView alloc]init];
[line setImage:[UIImage imageNamed:@"lc_line.png"]];
[self.readerView addSubview:line];
_m_line=line;
UIImageView *imageview=[[[UIImageView alloc] init] autorelease];
if (rect.size.height>480)
{
[imageview setFrame:CGRectMake(0,0,
rect.size.width, rect.size.height-50)];
imageview.image=[UIImage imageNamed:@"le_4inch.png"];
[_m_line setFrame:CGRectMake(48,87.0f,224, 6)];
}
else
{
[imageview setFrame:CGRectMake(0,0,
rect.size.width, rect.size.height+30)];
imageview.image=[UIImage imageNamed:@"le_4inch.png"];
[_m_line setFrame:CGRectMake(48,87.0f,224, 6)];
}
[self.readerView addSubview:imageview];
self.readerDelegate=self;
NSLog(@"%f",self.view.frame.origin.y);
[self customReaderView];
UILabel *lab=[[[UILabel alloc] initWithFrame:CGRectMake(0, 340, 320, 20)] autorelease];
[lab setShadowColor:[UIColor blackColor]];
[lab setBackgroundColor:[UIColor clearColor]];
self.m_resultLab=lab;
[line release];
[self moveLine];
_m_timer=[NSTimer scheduledTimerWithTimeInterval:3 target:selfselector:@selector(moveLine) userInfo:nil repeats:YES];
}
-(void)moveLine
{
// use the random() function to randomize up our flake attributes
//speed
_m_line.frame=CGRectMake(48, 86, 224, 6);
int endX =48;
_m_line.alpha =1.0f;
[UIView beginAnimations:nil context:_m_line];
[UIView setAnimationDuration:3.0f];
[UIView setAnimationDelegate:self];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
// [UIView setAnimationDidStopSelector:@selector(moveLine)];
_m_line.alpha=0.6f;
_m_line.frame = CGRectMake(endX,_m_line.frame.origin.y+217,224,6);
[UIView commitAnimations];
}