?添加依賴庫:AVFoundation.framework验懊、libiconv.2.dylib、CoreMedia.framework、CoreVideo.framework,其中l(wèi)ibzbar.a是SDK中的,(如果需要通過SVN上傳自己代碼時丐箩,要記得還有這個.a文件)
在你要進(jìn)行添加掃描的界面的.h里可直接復(fù)制到工程里
添加頭文件
import "ZBarSDK.h"
//設(shè)置代理
@protocol ErweimaDelegate
//掃描出結(jié)果則調(diào)用這個方法
-(void)finishRead:(NSString *)barCode;
@end
@interface ErweimaViewController : superVC < ZBarReaderViewDelegate > //此處superVC是自定義的父類
@property (strong, nonatomic)id < ErweimaDelegate >delegate;
@end
4.在.m文件中:
@interface ErweimaViewController ()
{
ZBarReaderViewrederView;//二維碼掃描View,可自定義樣式
UIImageViewlineView;//自定義的掃描線
NSTimer *time;//定時器恤煞,控制掃描線跑動
}
//在進(jìn)入界面時就開始掃描
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];[rederView start];
}
//退出界面時就停止掃描
(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[rederView stop];
}
-(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title = @"掃描";
[self initView];
}
(void)initView
{
rederView = [[ZBarReaderView alloc] init];
rederView.frame = CGRectMake(0, 0,self.view.frame.size.width,self.view.frame.size.height);
rederView.readerDelegate = self;
rederView.allowsPinchZoom = NO; // 不使用Pinch手勢變焦
rederView.torchMode = 0;//閃光燈 關(guān)
rederView.trackingColor = [UIColor clearColor];//鎖定圖碼 顯示的顏色框
if (TARGET_IPHONE_SIMULATOR) {
ZBarCameraSimulatorcamera = [[ZBarCameraSimulator alloc] initWithViewController:self];
camera.readerView = rederView;
}
[self.view addSubview:rederView];
/************可忽略此域中的以下代碼案站,可以自己自定義***************/
//掃描區(qū)域計算
CGRect scanMaskRect = CGRectMake(Width_Screen/2-75, 150, 150, 150);
CGRect scanCrop=[self getScanCrop:scanMaskRect readerViewBounds:rederView.bounds];
rederView.scanCrop = scanCrop;
[rederView.captureReader captureFrame];
[rederView start];
UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(-20, -64, Width_Screen+40, Height_Screen)];
image.image = [UIImage imageNamed:@"111111111"];
image.backgroundColor = [UIColor clearColor];
image.alpha = 0.3;
[self.view addSubview:image];
//這里添加了類似微信的掃描線梯影,并開始上線滑動動畫
lineView=[[UIImageView alloc] initWithFrame:CGRectMake(51, 200, 219, 3)];
// lineView.image=[UIImage imageNamed:@"scan_line"];
lineView.backgroundColor = UIColor_Theme;
[self.view addSubview:lineView];
[self loadAnimationStart];
}
-(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)rvBounds{
CGFloat x,y,width,height;
x = rect.origin.y / rvBounds.size.height;
y = 1 - (rect.origin.x + rect.size.width) / rvBounds.size.width;
width = (rect.origin.y + rect.size.height) / rvBounds.size.height;
height = 1 - rect.origin.x / rvBounds.size.width;
return CGRectMake(x, y, width, height);
}
-(void)loadAnimationStart{
if(Width_Screen !=320){? ? ? ? [UIViewanimateWithDuration:2.0animations:^{? ? ? ? lineView.frame=CGRectMake(lineView.frame.origin.x,390,lineView.frame.size.width,lineView.frame.size.height);? ? }completion:^(BOOL finished) {? ? ? ? ? ? ? time = [NSTimerscheduledTimerWithTimeInterval:0.2target:selfselector:@selector(secStart)userInfo:nilrepeats:NO];? ? }];}else{? ? ? ? [UIViewanimateWithDuration:2.0animations:^{? ? ? ? lineView.frame=CGRectMake(lineView.frame.origin.x,345,lineView.frame.size.width,lineView.frame.size.height);? ? }completion:^(BOOL finished) {? ? ? ? ? ? ? ? time = [NSTimerscheduledTimerWithTimeInterval:0.2target:selfselector:@selector(secStart)userInfo:nilrepeats:NO];? ? }];? ? }
}
-(void)secStart{
if(Width_Screen !=320){? ? lineView.frame=CGRectMake(lineView.frame.origin.x,175,lineView.frame.size.width,lineView.frame.size.height);if(time !=nil) {? ? ? ? [selfloadAnimationStart];? ? }? ? }else{? ? lineView.frame=CGRectMake(lineView.frame.origin.x,130,lineView.frame.size.width,lineView.frame.size.height);if(time !=nil) {? ? ? ? [selfloadAnimationStart];NSLog(@"123");? ? }NSLog(@"qwe");}
}
-(void)readerView:(ZBarReaderView)readerView didReadSymbols:(ZBarSymbolSet)symbols fromImage:(UIImage)image
{
NSStringstr;//掃描出的字段席噩,記錄下來
for(ZBarSymbol *symbolinsymbols) {NSLog(@"%@", symbol.data);? ? str=symbol.data;? ? [rederView stop];? ? [self.navigationController popViewControllerAnimated:YES];? ? [selfshowHudMessageAndHidden:str];//展示出掃描結(jié)果勋拟,根據(jù)需求可自定義展示樣式lineView.hidden =YES;? ? [time setFireDate:[NSDatedistantFuture]];? ? [time invalidate];? ? time =nil;break;}//這個代理是 返回到上個界面把str傳過去的,根據(jù)需求可改變if([_delegate respondsToSelector:@selector(finishRead:)]){? ? ? ? [_delegate finishRead:str];}