美文网首页
自动适配多种尺寸占位图(带缓存)

自动适配多种尺寸占位图(带缓存)

作者: yohen | 来源:发表于2017-01-11 11:49 被阅读64次

    #import "UIImage+Placeholder.h"

    #import "MyCommon.h"

    #define SCLoading @"SCLoading"

    static NSMutableDictionary *mutableImageDic;

    @implementation UIImage (Placeholder)

    + (UIImage *)loadingImage:(CGSize)size{

    //初始化

    if (!mutableImageDic) {

    mutableImageDic = [NSMutableDictionary new];

    [mutableImageDic setObject:[UIImage imageNamed:SCLoading] forKey:SCLoading];

    }

    if (CGSizeEqualToSize(size, CGSizeZero)) {//如果是自动布局没有size,则三倍面积

    UIImage *img = (UIImage *)[mutableImageDic objectForKey:SCLoading];

    size = CGSizeMake(img.size.width * 3, img.size.height * 3);

    }

    //如果缓存里面,马上返回

    NSString *imageSizeKey = NSStringFromCGSize(size);

    UIImage *cacheImage = [mutableImageDic objectForKey:imageSizeKey];

    if (cacheImage) {

    return cacheImage;

    }

    //没有就绘制

    UIImage *img = [mutableImageDic objectForKey:SCLoading];

    UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, UIColorFromRGB(0xDBDBDB).CGColor);

    CGContextFillRect(context, CGRectMake(0, 0, size.width, size.height));

    if (size.width < img.size.width || size.height < img.size.height) {

    [img drawInRect:CGRectMake(0, 0, size.width, size.height)];

    }else{

    [img drawInRect:CGRectMake((size.width - img.size.width)/2, (size.height - img.size.height)/2, img.size.width, img.size.height)];

    }

    UIImage* retImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    //绘制后添加到到字典内

    [mutableImageDic setObject:retImage forKey:imageSizeKey];

    return retImage;

    }

    @end

    相关文章

      网友评论

          本文标题:自动适配多种尺寸占位图(带缓存)

          本文链接:https://www.haomeiwen.com/subject/mtkdlttx.html