二维码扫描iOS

本文介绍了一种使用iOS设备扫描二维码并获取ShiftJIS编码文本的方法,包括初始化ZBarReaderViewController,设置代理,显示扫描界面,处理扫描结果,并在扫描完成后展示扫描结果的流程。


要引入一个静态库

libiconv.tbd


@interface FHomeViewController ()<ZBarReaderDelegate>

{

       

    //二维码

    int num;

    BOOL upOrdown;

    NSTimer * qrTimer;

}



@property (strong, nonatomic) UIImageView    * line;




// 扫一扫

- (void)buttonMenuToRight

{

    num = 0;

    upOrdown = NO;

    //初始话ZBar

    ZBarReaderViewController * reader = [ZBarReaderViewController new];

    //设置代理

    reader.readerDelegate = self;

    //支持界面旋转

    reader.supportedOrientationsMask = ZBarOrientationMaskAll;

    reader.showsHelpOnFail = NO;

    reader.scanCrop = CGRectMake(0.1, 0.2, 0.8, 0.8);//扫描的感应框

    // 图片扫描器

    ZBarImageScanner * scanner = reader.scanner;

    [scanner setSymbology:ZBAR_I25

                   config:ZBAR_CFG_ENABLE

                       to:0];

    

    UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, iPhoneWidth, [[UIScreen mainScreen] bounds].size.height)];

    view.backgroundColor = [UIColor clearColor];

    reader.cameraOverlayView = view;

    

    

    UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, iPhoneWidth-40, 40)];

    label.text = @"请将扫描的二维码至于下面的框内\n谢谢!";

    label.textColor = [UIColor whiteColor];

    label.textAlignment = 1;

    label.lineBreakMode = 0;

    label.numberOfLines = 2;

    label.backgroundColor = [UIColor clearColor];

    [view addSubview:label];

    

    UIImageView * image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"frame.png"]];

    image.frame = CGRectMake(30, 80, iPhoneWidth-60, iPhoneWidth-60);

    [view addSubview:image];

    

    _line = [[UIImageView alloc] initWithFrame:CGRectMake(10, 0, image.frame.size.width-20, 17)];

    _line.image = [UIImage imageNamed:@"greenbar1"];

    [image addSubview:_line];

    

    //定时器,设定时间过1.5秒,

    qrTimer = [NSTimer scheduledTimerWithTimeInterval:.02 target:self selector:@selector(animation1) userInfo:nil repeats:YES];

    

    [self presentViewController:reader animated:YES completion:^{

        

    }];

}

-(void)animation1

{

    if (upOrdown == NO) {

        num ++;

        _line.frame = CGRectMake(10, 2*num, iPhoneWidth-80, 17);

        if (2*num >= iPhoneWidth-80) {

            upOrdown = YES;

            _line.image = [UIImage imageNamed:@"greenbar2"];

        }

    }

    else {

        num --;

        _line.frame = CGRectMake(10, 2*num, iPhoneWidth-80, 17);

        if (num <= 0) {

            upOrdown = NO;

            _line.image = [UIImage imageNamed:@"greenbar1"];

        }

    }

}


-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker

{

    [qrTimer invalidate];

    _line.frame = CGRectMake(10, 10, iPhoneWidth-80, 2);

    num = 0;

    upOrdown = NO;

    [picker dismissViewControllerAnimated:YES completion:^{

        [picker removeFromParentViewController];

    }];

}


-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{

    [qrTimer invalidate];

    _line.frame = CGRectMake(10, 10, iPhoneWidth-80, 2);

    num = 0;

    upOrdown = NO;

    [picker dismissViewControllerAnimated:YES completion:^{

        [picker removeFromParentViewController];

        UIImage * image = [info objectForKey:UIImagePickerControllerOriginalImage];

        //初始化

        ZBarReaderController * read = [ZBarReaderController new];

        //        ZBarReaderController * read = [[ZBarReaderController alloc] init];

        //设置代理

        read.readerDelegate = self;

        CGImageRef cgImageRef = image.CGImage;

        ZBarSymbol * symbol = nil;

        id <NSFastEnumeration> results = [read scanImage:cgImageRef];

        for (symbol in results)

        {

            break;

        }

        NSString * result;

        if ([symbol.data canBeConvertedToEncoding:NSShiftJISStringEncoding])

            

        {

            result = [NSString stringWithCString:[symbol.data cStringUsingEncoding: NSShiftJISStringEncoding] encoding:NSUTF8StringEncoding];

        }

        else

        {

            result = symbol.data;

        }

        

        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"扫描结果" message:result delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"前往", nil];

        [alert show];

        NSLog(@"result = %@",result);

        

    }];

}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

    if (buttonIndex==1) {

        [[UIApplication sharedApplication] openURL:[ NSURL URLWithString:alertView.message]];

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值