使用二维码——第三方库ZBar和libqrencode的使用

阅读更多
1.下载ZBar SDK并导入工程
地址: https://github.com/bmorton/ZBarSDK
2.往项目中添加Framework框架及动态库
AVFoundation.framework,CoreMedia.framework,CoreVideo.framework,libiconv.dylib和libber.a
3.在使用的地方引入头文件
#import "ZBarSDK.h"
 
4.使用  ZBarReaderViewController扫描二维码
扫描:
- ( void )scan:( id )sender
{
   
  ZBarReaderViewController  *reader = [[ ZBarReaderViewController  alloc ]  init ];
    reader.
readerDelegate  =  self ;
    reader.
supportedOrientationsMask  =  ZBarOrientationMaskAll ;
   
  ZBarImageScanner  *scanner = reader. scanner ;
    [scanner
  setSymbology : ZBAR_I25  config : ZBAR_CFG_ENABLE  to : 0 ];
   
    reader.
showsZBarControls  =  YES ;
   
    [
self  presentViewController :reader  animated : YES  completion : nil ];
}
现在获取二维码的相关信息:
- ( void )imagePickerController:( UIImagePickerController  *)picker didFinishPickingMediaWithInfo:( NSDictionary  *)info
{
   
  id < NSFastEnumeration >results = [info  objectForKey : ZBarReaderControllerResults ];
   
  ZBarSymbol  *symbol =  nil ;
   
  // 代码如何修改

   
  for  (symbol  in  results)
       
  break ;
   
  //symbol = results;
   
  imageVIew . image  = [info  objectForKey : UIImagePickerControllerOriginalImage ];
   
    [picker dismissViewControllerAnimated:YES completion:nil];
     _label . text  = symbol. data ;
   
    NSLog(@"扫描内容:%@",symbol.data);
}
 
5.使用  ZBarReaderView实现扫描页面高度订制
实现协议   ZBarReaderViewDelegate (UIAlertView)
并定义:       ZBarReaderView  *readerVIew;
    ZBarCameraSimulator *cameraSim;
实现代码:
readerVIew  = [[ ZBarReaderView  alloc ] init ];
   
  readerVIew . frame  =  CGRectMake ( 50 ,  44 ,  200 ,  200 );
   
  readerVIew . readerDelegate  =  self ;
   
  // 关闭闪光灯
   
  readerVIew . torchMode  =  0 ;
   
  // 扫描区域:很重要
   
  CGRect  scanMaskRect =  CGRectMake ( 60 ,  CGRectGetMidY ( readerVIew . frame )- 126 ,  200 ,  200 );
   
   
  //[readerVIew setAllowsPinchZoom:YES];
   
   
  if  ( TARGET_IPHONE_SIMULATOR ) // 应为是否有权限?
    {
       
  cameraSim  = [[ ZBarCameraSimulator  alloc ] initWithViewController : self ];
       
  cameraSim . readerView  =  readerVIew ;
    }
    [
self . view  addSubview : readerVIew ];
   
  // 扫描区域计算 : 加上该代码后似乎无法扫描出结果了
   
  readerVIew . scanCrop  = [ self  getScanCrop :scanMaskRect  readerViewBounds : readerVIew . bounds ];
    [
readerVIew  start ];
 
区域范围:
-( 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);
}
 
ZBarReaderViewDelegate的方法:
- ( void )readerView:( ZBarReaderView  *)readerView didReadSymbols:( ZBarSymbolSet  *)symbols fromImage:( UIImage  *)image
{
   
  NSString  *codeData = [[ NSString  alloc ] init ];
   
  for  ( ZBarSymbol  *sym  in  symbols)
    {
        codeData = sym.
data ;
       
  break ;
    }
   
  // 可以获取到
   
  UIAlertView  *alert = [[ UIAlertView  alloc ] initWithTitle : @" 扫描结果 "  message :codeData  delegate : self  cancelButtonTitle : @"OK"  otherButtonTitles :  nil ];
    alert.
delegate  =  self ;
    [alert
  show ];
    [
readerVIew  stop ];
}
 
打开获取到的信息:
- ( void )alertView:( UIAlertView  *)alertView clickedButtonAtIndex:( NSInteger )buttonIndex
{
   
    [[
UIApplication  sharedApplication ] openURL :[ NSURL  URLWithString :alertView. message ]];
}
 
6.使用libqrencode生成二维码
步骤一:首先向工程中导入第三方库libqrencode
步骤二:向QRCodeGenerator.h或者整个项目中引入框架  #import  ,否则会报错
步骤三:在相应的文件中引入头文件
#import  "QRCodeGenerator.h"
步骤四:调用库中的方法生成图片(参数为字符串和图片大小)
         UIImage  *image = [ QRCodeGenerator  qrImageForString : _label . text  imageSize : imageVIew . bounds . size . width ];
其他应用待进一步挖掘。

你可能感兴趣的:(Objective-C,框架)