继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

iOS - 二维码的方法类,拖进去就能用!

ibeautiful
关注TA
已关注
手记 343
粉丝 107
获赞 529

二维码在iOS中的创建已经非常普遍,但是算作偏门的冷知识,建议不用死记代码,很头疼的代码!建议用的时候直接在网上找就可以了,今天提供二维码创建的方法类,节省了在网上找的时间哦!

代码如下

.h文件中声明调用方法和参数类型:

  #import <Foundation/Foundation.h>
  #import <UIKit/UIKit.h>
  @interface GJProduceTwoCode : NSObject

    /**
          创建二维码
       *参数1:二维码目标字符串
       *参数2:指定生成的大小size - 建议size的大小传imageView的大小
       *参数3:添加的logo(可以为nil) - 其中logo的大小为size的5.0(默
     认, 也可以去修改pro)
    */
 + (UIImage *)codeWidthDataString:(NSString *)TargetString size:(CGFloat)size logo:(NSString *)logoName;@end

.m文件中具体方法的实现

#import "GJProduceTwoCode.h"static CGFloat pro = 5.0;@implementation GJProduceTwoCode/**
 创建二维码
 参数1:二维码目标字符串
 参数2:指定生成的大小size - 建议size的大小传imageView的大小
 参数3:添加的logo(可以为nil) - 其中logo的大小为size的5.0(默认, 也可以去修改pro)
 */
 + (UIImage *)codeWidthDataString:(NSString *)TargetString size:(CGFloat)size logo:(NSString *)logoName {    
    //1、创建过滤器
    
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];    
    //2、过滤器恢复默认
    [filter setDefaults];    //3、给过滤器添加数据(数据要转化成UTF8)
    NSData *data = [TargetString dataUsingEncoding:NSUTF8StringEncoding];    //4、通过KVO设置滤镜inputMessage数据
    [filter setValue:data forKey:@"inputMessage"];    //5、获取输出的二维码
    CIImage *outputImage = [filter outputImage];    
    
//    画出二维码
    UIImage *targeImage = [self createNonInterpolatedUIimaegFormCIImage:outputImage withSize:size logo:(logoName != nil ? logoName : nil)];    
    return targeImage;
    
    
    
}       #pragma mark - 根据参数画出二维码+ (UIImage *)createNonInterpolatedUIimaegFormCIImage:(CIImage *)image withSize:(CGFloat)size logo:(NSString *)logoName{    
//    获取图片的frame值,转换
    CGRect extent = CGRectIntegral(image.extent);//     设置比例
    CGFloat scale = MIN(size / CGRectGetWidth(extent), size / CGRectGetHeight(extent));    
    //1、创建bitMap
    size_t width = CGRectGetWidth(extent) * scale;
    size_t height = CGRectGetHeight(extent) * scale;    
//    创建图形上下文//     设置渐变空间
    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();//    创建图形上下文空间
    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);//    
    CIContext *context = [CIContext contextWithOptions:nil];    CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);    CGContextScaleCTM(bitmapRef, scale, scale);    CGContextDrawImage(bitmapRef, extent, bitmapImage);    
    //2、保存bitImage图片
    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);    CGContextRelease(bitmapRef);    CGImageRelease(bitmapImage);    
    UIImage *outputImage = [UIImage imageWithCGImage:scaledImage];    //生成logo
    BOOL logo = logoName != nil ? YES : NO;    if (logo) {        UIGraphicsBeginImageContextWithOptions(outputImage.size, NO, [[UIScreen mainScreen] scale]);
        [outputImage drawInRect:CGRectMake(0, 0, size, size)];        UIImage *waterImage = [UIImage imageNamed:logoName];        //注意:logo不能太大(最大不能超过二维码图片的30%),否则扫描不出来
        [waterImage drawInRect:CGRectMake((size - size / pro) / 2., (size - size / pro) / 2., size / pro, size / pro)];        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();        UIGraphicsEndImageContext();
        
        outputImage = newImage;
    }    
    return outputImage;
}@end

代码中的注释写的已经很清楚了,就不再做过多的解释了,给一个效果图吧!

https://img.mukewang.com/5d5e01510001783806680366.png

Snip20171207_2.png



作者:guojie
链接:https://www.jianshu.com/p/d33da3f5d268

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP