1.给定一个imageView,显示图片
#import
<UIKit/UIKit.h>
@interface
AsynImageView :
UIImageView
@property
(
nonatomic
,
retain
)
NSString
*urlString;//网址
- (void)setUrlString:(NSString *)urlString placeholder:(UIImage *)aImage;
@end
#import
"AsynImageView.h"
@implementation AsynImageView
- ( void )dealloc
{
self . urlString = nil ;
[ super dealloc ];
}
- ( void )setUrlString:( NSString *)urlString
{
if ( _urlString != urlString) {
[ _urlString release ];
_urlString = [urlString retain ];
}
// 把图片中的 ":" 和"/"换成 "_", 作为图片的名字 , 保证图片名字不重复
NSString *imageName = [urlString stringByReplacingOccurrencesOfString : @":" withString : @"_" ];
imageName = [imageName stringByReplacingOccurrencesOfString : @"/" withString : @"_" ];
// 获取沙盒中缓存文件夹路径
NSString *cachesPath = [ NSSearchPathForDirectoriesInDomains ( NSCachesDirectory , NSUserDomainMask , YES ) firstObject ];
// 图片路径
NSString *filePath = [cachesPath stringByAppendingPathComponent :imageName];
NSFileManager *fm = [ NSFileManager defaultManager ];
if ([fm fileExistsAtPath :filePath]) {
// 存在图片
UIImage *image = [ UIImage imageWithContentsOfFile :filePath];
// 显示图片
self . image = image;
} else {
@implementation AsynImageView
- ( void )dealloc
{
self . urlString = nil ;
[ super dealloc ];
}
- ( void )setUrlString:( NSString *)urlString
{
if ( _urlString != urlString) {
[ _urlString release ];
_urlString = [urlString retain ];
}
// 把图片中的 ":" 和"/"换成 "_", 作为图片的名字 , 保证图片名字不重复
NSString *imageName = [urlString stringByReplacingOccurrencesOfString : @":" withString : @"_" ];
imageName = [imageName stringByReplacingOccurrencesOfString : @"/" withString : @"_" ];
// 获取沙盒中缓存文件夹路径
NSString *cachesPath = [ NSSearchPathForDirectoriesInDomains ( NSCachesDirectory , NSUserDomainMask , YES ) firstObject ];
// 图片路径
NSString *filePath = [cachesPath stringByAppendingPathComponent :imageName];
NSFileManager *fm = [ NSFileManager defaultManager ];
if ([fm fileExistsAtPath :filePath]) {
// 存在图片
UIImage *image = [ UIImage imageWithContentsOfFile :filePath];
// 显示图片
self . image = image;
} else {
//
不存在
//block内部不能使用self,会造成循环套用
//
在
mrc
下使用
//__block 类名 *(新名字) = self;
//
在
arc
下使用
// __weak
类名 *(新名字)
= self;
__block
AsynImageView
*blockSelf =
self
;
//给定网址
NSURL
*url = [[
NSURL
alloc
]
initWithString
:urlString];
//发出网络请求
NSURLRequest
*urlRequest = [[
NSURLRequest
alloc
]
initWithURL
:url
cachePolicy
:
NSURLRequestUseProtocolCachePolicy
timeoutInterval
:
30
];
//网络加载
[
NSURLConnection
sendAsynchronousRequest
:urlRequest
queue
:[
NSOperationQueue
mainQueue
]
completionHandler
:^(
NSURLResponse
*response,
NSData
*data,
NSError
*error) {
if (error) {
NSLog ( @"%@" , error);
} else {
// 显示图片
UIImage *image = [ UIImage imageWithData :data];
blockSelf. image = image;
// 存储到沙盒中
[data writeToFile :filePath atomically : YES ];
NSLog ( @"%@" , filePath);
}
}];
[urlRequest release ];
}
}
- ( void )setUrlString:( NSString *)urlString placeholder:( UIImage *)aImage
{
// 显示占位
self . image = aImage;
// 设置要显示的图片的 url
self . urlString = urlString;
if (error) {
NSLog ( @"%@" , error);
} else {
// 显示图片
UIImage *image = [ UIImage imageWithData :data];
blockSelf. image = image;
// 存储到沙盒中
[data writeToFile :filePath atomically : YES ];
NSLog ( @"%@" , filePath);
}
}];
[urlRequest release ];
}
}
- ( void )setUrlString:( NSString *)urlString placeholder:( UIImage *)aImage
{
// 显示占位
self . image = aImage;
// 设置要显示的图片的 url
self . urlString = urlString;
}
2.根视图显示内容
#import
"RootViewController.h"
#import "AsynImageView.h"
@interface RootViewController ()
@end
@implementation RootViewController
- ( void )viewDidLoad {
[ super viewDidLoad ];
#import "AsynImageView.h"
@interface RootViewController ()
@end
@implementation RootViewController
- ( void )viewDidLoad {
[ super viewDidLoad ];
// Do any additional setup after loading the view.
AsynImageView
*asynIV = [[
AsynImageView
alloc
]
initWithFrame
:
CGRectMake
(
0
,
0
,
375
,
667
)];
// asynIV.urlString = @"http://img.funshion.com/attachment/upload/images/2009/11-05/11910545_1257387524_357.jpg";
[asynIV setUrlString : @"http://ww1.sinaimg.cn/mw600/533cb486jw1diewjr9eq6j.jpg" placeholder :[ UIImage imageNamed : @"1" ]];
[ self . view addSubview :asynIV];
[asynIV release ];
}
// asynIV.urlString = @"http://img.funshion.com/attachment/upload/images/2009/11-05/11910545_1257387524_357.jpg";
[asynIV setUrlString : @"http://ww1.sinaimg.cn/mw600/533cb486jw1diewjr9eq6j.jpg" placeholder :[ UIImage imageNamed : @"1" ]];
[ self . view addSubview :asynIV];
[asynIV release ];
}