所以,我有一个带有tableview的应用程序,可以显示来自web的图像(无论从哪里开始)
当视图加载下载开始时,但我想构建一个缓存来仅下载缓存中没有的图像。
我已经看过下载并保存在磁盘上的教程,但我该如何实现此验证? 只下载IF不是本地的,如果本地显示本地。
如何动态获取此图像?
几乎使用方法imageNamed
所以当我需要构建表视图时,我只需调用[MyClass getImageWithName:(name)
并且如果存在,则返回我的图像,如果没有将其放在下载队列上
为了说清楚,我的问题是:“我怎样才能从文件夹中轻松获得一张图片?”
答案 0 :(得分:1)
做以下事情:
- (NSString *)ImagesDirectoryPath
{
NSFileManager *fileManger = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
basePath = [basePath stringByAppendingFormat:@"/Images"];
NSError *error;
if(![fileManger fileExistsAtPath:basePath])
{
[fileManger createDirectoryAtPath:basePath withIntermediateDirectories:NO attributes:nil error:&error];
}
return basePath;
}
此方法将返回文档目录下的图像路径
现在您有图像名称因此我们将在图像目录中检查其是否退出。如果退出然后使用该img或下载img然后存储它 //此代码将为cellForRowAtIndexPath
NSString *strImgPath = [self ImagesDirectoryPath];
strImgPath = [strImgPath stringByAppendingFormat:[NSString stringWithFormat:@"/%@.png",imgName]];
NSFileManager *fileManger = [NSFileManager defaultManager];
if(![fileManger fileExistsAtPath:strImgPath]) //Check wether image exits at Image Folder in Doc Dir
{//file not exists
UIImage *imgForCell = [MyClass getImageWithName:imgName];
if(imgForCell)
{
NSData *dataImg = UIImagePNGRepresentation(imgForCell);
if(dataImg)
{
[dataImg writeToFile:strImgPath atomically:YES];
}
}
imgView.image=imgForCell; //Set Image in ImageView
}
else
{//file exists
NSData *imgData = [NSData dataWithContentsOfFile:strImgPath];
UIImage*imgFound = [UIImage imageWithData:imgData];
imgView.image=imgFound; //Set Image in ImageView
}
答案 1 :(得分:-1)
您可以编写一个保存/加载图像的功能。
以下是一个示例,说明如何从文档文件夹中保存/加载图像: http://www.friendlydeveloper.com/2010/02/using-nsfilemanager-to-save-an-image-to-or-loadremove-an-image-from-documents-directory-coding/
但建议将图像保存在Library / Caches
中