IOS二维码 扫描

iOS二维码 扫描 可以使用SDK: ZXing和ZBar ,最终我选择了ZBar进行二维码识别,它的注释清晰,便于使用。而且导入库后不用多余的设置,直接根据官方文档提供的接口即可实现我们要的功能。
ZBar为我们提供了两种使用方式,一种是直接调用ZBar提供的ZBarReaderViewController打开一个扫描界面,另一种方式是使用ZBar提供的可以嵌在其他视图中的ZBarReaderView,实际项目中我们更可能会使用第二种方式,这可以让我们对界面做更多的定制。在这边我还是将2 种使用方法大概说一下。
首先是下载zbar,将ZBarSDK导入项目,在需要使用ZBar的文件中导入ZBarSDK.h,将AVFoundation.framework (weak)
CoreMedia.framework (weak)
CoreVideo.framework (weak)
QuartzCore.framework
libiconv.dylib 框架加入你的工程。
1.使用ZBarReaderViewController:主要代码:

@interface ReaderSampleViewController : UIViewController < ZBarReaderDelegate >
{
    UIImageView *resultImage;
    UITextView *resultText;
}
@property (nonatomic, retain) IBOutlet UIImageView *resultImage;
@property (nonatomic, retain) IBOutlet UITextView *resultText;
- (IBAction) scanButtonTapped;
@end
- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation
{
    return(YES);
}
//初始化 ZBarReaderViewController 并打开扫描
- (IBAction) scanButtonTapped
{
    // ADD: present a barcode reader that scans from the camera feed
    ZBarReaderViewController *reader = [ZBarReaderViewController new];
    reader.readerDelegate = self;
    reader.supportedOrientationsMask = ZBarOrientationMaskAll;

    ZBarImageScanner *scanner = reader.scanner;
    // TODO: (optional) additional reader configuration here

    // EXAMPLE: disable rarely used I2/5 to improve performance
    [scanner setSymbology: ZBAR_I25
             config: ZBAR_CFG_ENABLE
             to: 0];

    // present and release the controller
    [self presentModalViewController: reader
          animated: YES];
    [reader release];
}
//实现delegate
- (void) imagePickerController: (UIImagePickerController*) reader
 didFinishPickingMediaWithInfo: (NSDictionary*) info
{
    // ADD: get the decode results
    id<NSFastEnumeration> results =
        [info objectForKey: ZBarReaderControllerResults];
    ZBarSymbol *symbol = nil;
    for(symbol in results)
        // EXAMPLE: just grab the first barcode
        break;

    // EXAMPLE: do something useful with the barcode data
    resultText.text = symbol.data;

    // EXAMPLE: do something useful with the barcode image
    resultImage.image =
        [info objectForKey: UIImagePickerControllerOriginalImage];

    // ADD: dismiss the controller (NB dismiss from the *reader*!)
    [reader dismissModalViewControllerAnimated: YES];
}

2.使用ZBarReaderView:主要代码:

#pragma mark 初始化扫描  
- (void)InitScan  
{  
    readview = [ZBarReaderView new];  
    readview.backgroundColor = [UIColor clearColor];  
    readview.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);  
    readview.readerDelegate = self;  
    readview.allowsPinchZoom = YES;//使用手势变焦  
    readview.trackingColor = [UIColor redColor];  
    readview.showsFPS = NO;// 显示帧率  YES 显示  NO 不显示  
    //readview.scanCrop = CGRectMake(0, 0, 1, 1);//将被扫描的图像的区域  

    UIImage *hbImage=[UIImage imageNamed:@"pick_bg.png"];  
    scanZomeBack=[[UIImageView alloc] initWithImage:hbImage];  
    //添加一个背景图片  
    CGRect mImagerect=CGRectMake((readview.frame.size.width-200)/2.0, (readview.frame.size.height-200)/2.0, 200, 200);  
    [scanZomeBack setFrame:mImagerect];  
    readview.scanCrop = [self getScanCrop:mImagerect readerViewBounds:readview.bounds];//将被扫描的图像的区域  

    [readview addSubview:scanZomeBack];  
    [readview addSubview:readLineView];  
    [self.view addSubview:readview];  
    [readview start];  

}  
#pragma mark 获取扫描区域  
-(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)readerViewBounds  
{  
    CGFloat x,y,width,height;  

    x = rect.origin.x / readerViewBounds.size.width;  
    y = rect.origin.y / readerViewBounds.size.height;  
    width = rect.size.width / readerViewBounds.size.width;  
    height = rect.size.height / readerViewBounds.size.height;  

    return CGRectMake(x, y, width, height);  
}  
#pragma mark 扫描动画  
-(void)loopDrawLine  
{  
    CGRect  rect = CGRectMake(scanZomeBack.frame.origin.x, scanZomeBack.frame.origin.y, scanZomeBack.frame.size.width, 2);  
    if (readLineView) {  
        [readLineView removeFromSuperview];  
    }  
    readLineView = [[UIImageView alloc] initWithFrame:rect];  
    [readLineView setImage:[UIImage imageNamed:@"line.png"]];  
    [UIView animateWithDuration:3.0  
                          delay: 0.0  
                        options: UIViewAnimationOptionCurveEaseIn  
                     animations:^{  
                         //修改fream的代码写在这里  
                         readLineView.frame =CGRectMake(scanZomeBack.frame.origin.x, scanZomeBack.frame.origin.y+scanZomeBack.frame.size.height, scanZomeBack.frame.size.width, 2);  
                         [readLineView setAnimationRepeatCount:0];  

                     }  
                     completion:^(BOOL finished){  
                         if (!is_Anmotion) {  

                             [self loopDrawLine];  
                         }  

                     }];  

    [readview addSubview:readLineView];  

}  
#pragma mark 获取扫描结果  
- (void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image  
{  
    // 得到扫描的条码内容  
    const zbar_symbol_t *symbol = zbar_symbol_set_first_symbol(symbols.zbarSymbolSet);  
    NSString *symbolStr = [NSString stringWithUTF8String: zbar_symbol_get_data(symbol)];  
    if (zbar_symbol_get_type(symbol) == ZBAR_QRCODE) {  
        // 是否QR二维码  
    }  

    for (ZBarSymbol *symbol in symbols) {  
        [sTxtField setText:symbol.data];  
        break;  
    }  

    [readerView stop];  
    [readerView removeFromSuperview];  


}  

有关于ZXing 的使用,我只是略看了 一下因为导入sdk 后 老是出现链接错误 ,查了好多资料搞不定,最后还是果断的选择了使用ZBar。希望大家 能 分享下ZXing 扫描二维码的方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值