iOS开发-二维码扫描

二维码扫描(话说博主在项目中写成“扫瞄”被测试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 allocinit];

    labIntroudction.backgroundColor = [UIColor clearColor];

    labIntroudction.frame=CGRectMake(self.readerView.center.x-95self.readerView.center.y+70,20050);

    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 allocinitautorelease];

    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,2246)]; 

    }

    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,2246)];

    }

    [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(48862246);

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];

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值