让UIImageView可以直接设置网络图片url,并且支持图片缓存

我们知道UIImageView是没有这个功能的,需要用http去get到图片的data,然后用imageWithData来设置image属性

NSMutableURLRequest *myRequest = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:url] ];
    
    
NSData *returnData = [ NSURLConnection sendSynchronousRequest:myRequest returningResponse:nil error:nil];
UIImageView *imgview = [[UIImageView alloc] initWithImage:[UIImage imageWithData:returnData]];


很麻烦,

下面我们就给UIImageView扩展一个方法叫做setImageWithUrl:(NSString *)url;

说道扩展,那肯定要用到类别,ok不多说,

头文件

@interface UIImageView (UIImageViewWeb)
-(void)setImageWithUrl:(NSString *)url;
@end

main文件

#import "UIImageView+UIImageViewWeb.h"
#import "Util.h"
#import "NSString+md5.h"

#define  CACHE_PATH @"webcache/"

@implementation UIImageView (UIImageViewWeb)

-(void)setImageWithUrl:(NSString *)url {
    
    if (url==nil) {
        return;
    }
    
    NSString *fileCacheName = [url md5Encrypt];//这儿是个md5加密,
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *URLs = [fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
    NSURL *documentsDirectory = URLs[0];
    NSURL *fileCacheDirectory = [documentsDirectory URLByAppendingPathComponent:CACHE_PATH];
    NSURL *fileCachePath = [fileCacheDirectory URLByAppendingPathComponent:fileCacheName];
    
    if([fileManager fileExistsAtPath:fileCachePath.path]) {
        NSData *fileCacheData = [NSData dataWithContentsOfURL:fileCachePath];
        self.image = [UIImage imageWithData:fileCacheData];
    } else {
        [Util httpGetData:url complete:^(id result) { 
            self.image = [UIImage imageWithData:result];
            BOOL d;
            if (![fileManager fileExistsAtPath:fileCacheDirectory.path isDirectory:&d]) {
                [fileManager createDirectoryAtURL:fileCacheDirectory withIntermediateDirectories:YES attributes:nil error:nil];
            }
            NSData *fileData = (NSData *)result;
            [fileData writeToURL:fileCachePath atomically:NO];
        }];
    }
}
@end

md5扩展

头文件

#import <CommonCrypto/CommonDigest.h>
@interface NSString (md5)
- (NSString *)md5Encrypt;
@end

main文件

#import "NSString+md5.h"

@implementation NSString (md5)

- (NSString *)md5Encrypt {
    const char *original_str = [self UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(original_str, strlen(original_str), result);
    NSMutableString *hash = [NSMutableString string];
    for (int i = 0; i < 16; i++)
    [hash appendFormat:@"%02X", result[i]];
    return [hash lowercaseString];
}
@end


util头文件

@interface Util : NSObject
+ (NSData *) httpGetData:(NSString *)url;
+ (void) httpGetData:(NSString *)url complete:(void(^)(id result))doWhat;
@end

util主文件 


+ (NSData *) httpGetData:(NSString *)url{
    NSMutableURLRequest *myRequest = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:url] ];
    [myRequest setValue:[self getCookie] forHTTPHeaderField:@"Cookie"];
    
    NSData *returnData = [ NSURLConnection sendSynchronousRequest:myRequest returningResponse:nil error:nil];
    return returnData;
}
+ (void) httpGetData:(NSString *)url complete:(void(^)(id result))doWhat {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // 耗时的操作
        NSData *returnData = [Util httpGetData:url];
        dispatch_async(dispatch_get_main_queue(), ^{
            doWhat(returnData);
        });
    });
}
@end




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值