1. 程式人生 > >iOS -- 二維碼生成使用cocoapods匯入libqrencode第三方庫

iOS -- 二維碼生成使用cocoapods匯入libqrencode第三方庫

第一步:

使用cocoapods第三方庫管理工具匯入libqrencode第三方庫
注:libqrencode實際是UIImageView的分類

第二步:

建立一個QRCodeGenerator的類
.h檔案:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface QRCodeGenerator : NSObject
+ (UIImage *)qrImageForString:(NSString *)string imageSize:(CGFloat)size;
@end

.m檔案

#import "QRCodeGenerator.h"
#import <qrencode.h>
enum {
qr_margin = 3
};
@implementation QRCodeGenerator

+ (void)drawQRCode:(QRcode *)code context:(CGContextRef)ctx size:(CGFloat)size {
unsigned char *data = 0;
int width;
data = code->data;
width = code->width;
float zoom = (double)size / (code->width + 2.0
* qr_margin); CGRect rectDraw = CGRectMake(0, 0, zoom, zoom); // draw CGContextSetFillColor(ctx, CGColorGetComponents([UIColor blackColor].CGColor)); for(int i = 0; i < width; ++i) { for(int j = 0; j < width; ++j) { if(*data & 1) { rectDraw.origin = CGPointMake((j + qr_margin) * zoom,(i + qr_margin) * zoom); CGContextAddRect(ctx, rectDraw); } ++data; } } CGContextFillPath(ctx); } + (UIImage
*)qrImageForString:(NSString *)string imageSize:(CGFloat)size { if (![string length]) { return nil; } QRcode *code = QRcode_encodeString([string UTF8String], 0, QR_ECLEVEL_L, QR_MODE_8, 1); if (!code) { return nil; } // create context CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef ctx = CGBitmapContextCreate(0, size, size, 8, size * 4, colorSpace, kCGImageAlphaPremultipliedLast); CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(0, -size); CGAffineTransform scaleTransform = CGAffineTransformMakeScale(1, -1); CGContextConcatCTM(ctx, CGAffineTransformConcat(translateTransform, scaleTransform)); // draw QR on this context [QRCodeGenerator drawQRCode:code context:ctx size:size]; // get image CGImageRef qrCGImage = CGBitmapContextCreateImage(ctx); UIImage * qrImage = [UIImage imageWithCGImage:qrCGImage]; // some releases CGContextRelease(ctx); CGImageRelease(qrCGImage); CGColorSpaceRelease(colorSpace); QRcode_free(code); return qrImage; } @end

第三步:

在需要生成本地二維碼的類中匯入QRCodeGenerator該類,列:#import "QRCodeGeneratir.h"

第四步:

使用qrImageForString方法生成二維碼
例如(第一個引數為二維碼中包含的資料,第二個引數為二維碼的大小):
self.QRCodeimageView.image = [QRCodeGenerator qrImageForString:jsonStr imageSize:200];