ios 图片的网络下载和显示(可缓存)
来源:互联网 发布:淘宝客户端 编辑:程序博客网 时间:2024/05/16 05:43
思路是:已存在的图片则从本地读取,本地不存在的图片则从网上下载到本地
在这里下载图片使用的是ASIHTTPRequest,
asi-http-request的使用参考:http://blog.csdn.net/marujunyy/article/details/8474518
下面是用法和自己写的一个类的代码:
现在需要使用它的类的.h文件中添加delegate,如下:
#import <UIKit/UIKit.h>#import "AsyncImageView.h"@interface RelatedAppsUIView : UIView<AsyncImageDelegate>{ __weak IBOutlet UIImageView *appImageView;}@end然后在使用它的类的.m文件中添加代理的方法,如下:
#import "RelatedAppsUIView.h"@implementation RelatedAppsUIView-(void)awakeFromNib{ AsyncImageView *asyncImageView=[[AsyncImageView alloc] init]; //如果有多个图片,则添加tag asyncImageView.delegate=self; asyncImageView.tag=1001; [asyncImageView loadImageFromURL:[NSURL URLWithString:[@"http://csdnimg.cn/www/images/csdnindex_logo.gif" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];}#pragma mark - AsyncImageDelegate-(void)getImageSuccess:(UIImage *)image tag:(NSNumber *)tag{ NSLog(@"tag ->>%@",tag); appImageView.image=image;}-(void)getImageFail:(UIImage *)image tag:(NSNumber *)tag{ //TUDO 添加默认图片 错误返回}@end
下面是类:AsyncImageView的.h和.m文件的代码
// AsyncImageView.h#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>#import "ASIFormDataRequest.h"@protocol AsyncImageDelegate <NSObject>-(void)getImageSuccess:(UIImage *)image tag:(NSNumber *)tag;-(void)getImageFail:(UIImage *)image tag:(NSNumber *)tag;@end@interface AsyncImageView : NSObject <ASIHTTPRequestDelegate>{ NSURL *urls; id<AsyncImageDelegate> delegate; int tag;}@property (nonatomic,assign) int tag;@property (nonatomic,retain) id<AsyncImageDelegate> delegate;- (void)loadImageFromURL:(NSURL*)url;//-(NSString *)GetTempPath:(NSString*)filename;-(BOOL)isExistsFile:(NSString *)filepath;-(UIImage *)getImage:(NSString*)filename;-(void)writeDataToFile:(NSString*)filename fileData:(NSData *)fileData;-(NSString *) getCacheFilePath:(NSString *)filename;@end
// AsyncImageView.m#import "AsyncImageView.h"@implementation AsyncImageView@synthesize delegate,tag;- (void)dealloc { [delegate release]; // //NSLog(@"AsyncImageView delloc"); [super dealloc];}- (void)loadImageFromURL:(NSURL*)url {// NSLog(@"--loadImageFromURL>>%@",url); if(url!=nil&&![url isEqual:@""]) { if ([self isExistsFile:[url description]]) { //返回数据 if ([delegate respondsToSelector:@selector(getImageSuccess:tag:)]) { [delegate performSelector:@selector(getImageSuccess:tag:) withObject:[self getImage:[url description]] withObject:[NSNumber numberWithInt:self.tag]]; } }else{ urls=url; [self retain]; ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:urls] autorelease]; [request setDelegate:self]; [request startAsynchronous]; } }}-(void)requestFailed:(ASIHTTPRequest *)request{ if ([delegate respondsToSelector:@selector(getImageFail:tag:)]) { [delegate performSelector:@selector(getImageFail:tag:) withObject:nil withObject:[NSNumber numberWithInt:self.tag]]; } [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; [self release];}- (void)requestFinished:(ASIHTTPRequest *)request{ NSData *responseData = [request responseData]; UIImage *image=[UIImage imageWithData:responseData]; if (image!=nil) { [self writeDataToFile:[urls description] fileData:responseData]; if ([delegate respondsToSelector:@selector(getImageSuccess:tag:)]) { [delegate performSelector:@selector(getImageSuccess:tag:) withObject:image withObject:[NSNumber numberWithInt:self.tag]]; } }else{ if ([delegate respondsToSelector:@selector(getImageFail:tag:)]) { [delegate performSelector:@selector(getImageFail:tag:) withObject:image withObject:[NSNumber numberWithInt:self.tag]]; } } [self release];}-(BOOL)isExistsFile:(NSString *)filepath{ NSFileManager *filemanage = [NSFileManager defaultManager]; NSArray *array=[filepath componentsSeparatedByString:@"//"]; NSArray *arrayName=[filepath componentsSeparatedByString:@"/"]; NSString *file=[NSString stringWithFormat:@"%@/%@",[array lastObject],[arrayName lastObject]]; return [filemanage fileExistsAtPath:[self getCacheFilePath:file]];}-(UIImage *)getImage:(NSString*)filename{ NSArray *array=[filename componentsSeparatedByString:@"//"]; NSArray *arrayName=[filename componentsSeparatedByString:@"/"]; NSString *file=[NSString stringWithFormat:@"%@/%@",[array lastObject],[arrayName lastObject]]; UIImage *image=[UIImage imageWithData:[NSData dataWithContentsOfFile:[self getCacheFilePath:file]]]; return image;}-(NSString *) getCacheFilePath:(NSString *)filename{NSArray *paths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);NSString *path=[paths objectAtIndex:0];NSString *filePath=[path stringByAppendingPathComponent:filename];return filePath;}-(void)writeDataToFile:(NSString*)filename fileData:(NSData *)fileData{ NSArray *array=[filename componentsSeparatedByString:@"//"]; [[NSFileManager defaultManager] createDirectoryAtPath:[self getCacheFilePath:[array lastObject]] withIntermediateDirectories:YES attributes:nil error:nil]; NSArray *arrayName=[filename componentsSeparatedByString:@"/"]; NSString *file=[NSString stringWithFormat:@"%@/%@",[array lastObject],[arrayName lastObject]]; [fileData writeToFile:[self getCacheFilePath:file] atomically:YES];}@end
- ios 图片的网络下载和显示(可缓存)
- android ImageLoader 缓存下载显示网络图片
- iOS 下载缓存网络图片 SDWebImage
- 利用缓存存储网络下载的图片
- Android缓存机制:LruCache+AsyncTask缓存和显示网络图片
- Android Listview显示网络下载的图片
- iOS下载网络图片
- ios--UIImage从网络下载、保存、显示图片
- 通过缓存来实现网络图片的下载,通过RecyclerView和ViewPaper来展示出来
- iOS中网络图片的下载
- IOS网络图片缓存详解
- IOS网络图片缓存详解
- IOS网络图片缓存详解
- IOS网络图片缓存详解
- IOS网络图片缓存详解
- IOS网络图片缓存详解
- iOS网络图片缓存详解
- IOS网络图片缓存详解
- 记录点滴
- vector和set的区别
- HTML表单的复习
- NDK
- poj 2406 D3C 算法 后缀数组 连续重复子串
- ios 图片的网络下载和显示(可缓存)
- 关于IntentService和Service
- vmware ubuntu安装openstack总结
- HDU 1789 Doing Homework again(贪心~!)
- 我多年的PHP经验分享
- 因年终奖引起的血案。过年了老板你最好给开发人员发点奖金,否则会......
- ip端口重定向
- oracle字符串函数介绍
- ndroid 4.0 Camera架构分析之Camera初始化