roselind的专栏

iOS二维码 扫描 可以使用SDK: ZXing和 ,最终我选择了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 feedZBarReaderViewController *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_I25config: ZBAR_CFG_ENABLEto: 0];// present and release the controller[self presentModalViewController: readeranimated: YES];[reader release];}//实现delegate- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info{// ADD: get the decode resultsid<NSFastEnumeration> results =[info objectForKey: ZBarReaderControllerResults];ZBarSymbol *symbol = nil;for(symbol in results)// EXAMPLE: just grab the first barcodebreak;// EXAMPLE: do something useful with the barcode dataresultText.text = symbol.data;// EXAMPLE: do something useful with the barcode imageresultImage.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, self); 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–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 / readerViewBounds= rectwidth = rectheight = rectreturn CGRectMake(x, y, width, height); } #pragma mark 扫描动画 -(void)loopDrawLine {CGRect rect = CGRectMake(scanZomeBack, scanZomeBack, scanZomeBack, 2); if (readLineView) {[readLineView removeFromSuperview]; }readLineView = [[UIImageView alloc] initWithFrame:rect]; [readLineView setImage:[UIImage imageNamed:@”line.png”]]; [UIView animateWithDuration:3.0delay: 0.0options: UIViewAnimationOptionCurveEaseInanimations:^{//修改fream的代码写在这里readLineView, scanZomeBack+scanZomeBack, scanZomeBack, 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}[readerView stop]; [readerView removeFromSuperview]; }

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

不要气馁于那前方的阴影,那只是因为我背后光芒万丈

roselind的专栏

相关文章:

你感兴趣的文章:

标签云: