• IOS开发 二维码功能的实现


    原帖地址:http://yul100887.blog.163.com/blog/static/20033613520121020611299/

    如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影。而手机等移动设备又成为二维码的一个很好的应用平台,不管是生成二维码还是扫码二维码。

    下面介绍一下如何在苹果iOS设备上使用二维码:

    1. 扫描二维码(解码)
    扫描二维码的开源库有很多如 ZBar、ZXing等。在此以ZBar作为例子构建二维码扫码应用。
    首先在github上下载ZBar SDK
    地址https://github.com/bmorton/ZBarSDK
    打开压缩包,其中有ZBarSDK 文件夹
    将ZBarSDK 文件夹包含到项目中来
    (Finder)
    (XCode)
    其中包含一个libzbar.a的静态库
    接着往项目中添加Framework框架及链接库(动态库、静态库)。在项目属性TARGETS?Summary 中找到Linked Frameworks and Libraries
    添加
    AVFoundation.framwork, CoreMedia.framework, CoreVideo.framework, libiconv.dylib 和libzbar.a (如图)


    然后在使用的地方引入头文件
    #import "ZBarSDK.h"
    调用ZBar的类必须实现ZBarReaderDelegate协议
    如:UIViewController <ZBarReaderDelegate>

    调用拍照功能扫描二维码

    //扫描二维码操作

    -(void)scanBtnPressed:(id)sender{

        // ADD: present a barcode reader that scans from the camera feed

        ZBarReaderViewController *reader = [[ZBarReaderViewController alloc]init];

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

    }

     

    回调在 - (void) imagePickerController: (UIImagePickerController*) reader
    didFinishPickingMediaWithInfo: (NSDictionary*) info
    最后在协议方法中通过info获取结果值

    1. id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];  
    2. ZBarSymbol *symbol = nil;  
    3. for(symbol in results)  
    4. // EXAMPLE: just grab the first barcode  
    5. break;  
    6.   
    7. // EXAMPLE: do something useful with the barcode data  
    8. resultText.text = symbol.data;  


    文档地址http://zbar.sourceforge.net/iphone/sdkdoc/
    二维码开源库ZXing的加载过程与此类似,但是ZXing默认并不支持一维码的扫描,而ZBar是支持的。

    2. 生成二维码(编码)
    在生成二维码的库中QREncoder 比较好用。ZXing库的android版本是带java版的编码库的但不知为何没有C++版的解码库,故在ios上也没法解码,如果应用中既要生成二维码又要扫描二维码就有可能要带两套不同的库。
    首先同样是在github 上下载到SDK库
    地址https://github.com/jverkoey/ObjQREncoder
    解压后将源码库直接包含到项目中来(如图)

    设置头文件路径,在TARGET中building settings ? Search Path

    当然也可以直接将库编译成静态库libQREcoder.a然后在包含进来

    接着在Frameworks 中添加静态库的引用


    然后在使用该库的地方包含头文件
    #import <QREncoder/QREncoder.h>
    注意:二维码显示的时候有可能会因为图像的大小而做调整,所以需要包含系统库QuartzCore.framework
    最后就可以调用编码库了:

    1. UIImage* image = [QREncoder encode:@"http://www.baidu.com/"];  



  • 相关阅读:
    WPF 进度条
    WPF CPU使用率线性表
    Android annotation
    git 操作
    git 合并指定目录到master
    远程连接mysql报错,ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)解决方案
    centos7 安装python2.7.14 并与原版本共存
    pycahrm 断点调试
    ImportError: No module named Crypto.Cipher 报错解决方法
    python操作 rabbitMQ
  • 原文地址:https://www.cnblogs.com/moyunmo/p/3382290.html
Copyright © 2020-2023  润新知