最近做一個IOS程序的功能,要求圖片在本地的話直接顯示,不在本地則去網上下載,然後存儲。到網上找完資料之後根據自己的理解實現了功能,下面說說思路。
實現一個繼承imageView的類,這個類主要功能就是根據傳來的圖片名字判斷本地是否存在該圖片,不存在則下載,存在就直接顯示。
- (void)drawRect:(CGRect)rect {
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *picPath = [docDir stringByAppendingPathComponent:self.picName]; //獲取路徑
if ([[NSFileManager defaultManager] fileExistsAtPath:picPath]) {
//存在圖片的時候直接讀取
NSData *data = [NSData dataWithContentsOfFile:picPath];
self.thumbnail.image = [UIImage imageWithData:data];
}
else{//開線程去下載並存儲
[NSThread detachNewThreadSelector:@selector(loadImage) toTarget:self withObject:nil];
}
}
- (void)loadImage {
//下載圖片
NSURL *url=[NSURL URLWithString:@"http://www.baidu.com/img/baidu_sylogo1.gif"];
UIImage *img = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:url]];
self.thumbnail.image = img;
//存儲圖片
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *picPath=[docDir stringByAppendingPathComponent:self.picName];
//將圖片寫到Documents文件中
[UIImagePNGRepresentation(self.thumbnail.image) writeToFile: picPath atomically:YES];
//線程退出
[NSThread exit];
}