我们知道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
@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