注:网络加载-相同图片也就是图片的地址相同,所以在此处介绍的是图片地址相同的方法,如果是拍照图片,同理;试着想用对图片解码处理。。这个应该可以扩展
使用方法 ManagerImagesLocal 是保存图片的类
[ManagerImagesLocal pathForImage:param withComplateHandle:^ {
NSLog(@"已保存过了");
} onFial:^(BOOL saveFail) {
if (!saveFail) {
NSLog(@"保存成功");
}else {
NSLog(@"保存失败");
}
}];
+(void)pathForImage:(NSString *)theImgStr withComplateHandle:(void (^)(void))successHandler onFial:(void (^)(BOOL saveFail))aFail
{//copy
// [ManagerImagesLocal shareFactory].yk_failHander=aFail;
//指定新建文件夹路径
NSString *imageDocPath = [self dataFilePath];
//获取文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isFlag;
__block BOOL findImageIsHas = YES;
if ([fileManager fileExistsAtPath:imageDocPath isDirectory:&isFlag]) {
NSMutableDictionary *dicfiel = [NSMutableDictionary dictionaryWithContentsOfFile:imageDocPath];
if (dicfiel && ![[dicfiel objectForKey:theImgStr] isEqualToString:@""]) {
__block NSURL *asseturl = [NSURL URLWithString:[dicfiel objectForKey:theImgStr]];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
NSLog(@"asset url %@", asseturl);
// Try to load asset at mediaURL // find image is exit or not
[library assetForURL:asseturl resultBlock:^(ALAsset *asset) {
// If asset doesn't exists
if (!asset){
NSLog(@"Could not find asset delete from photo library ");
// fialHandler();
findImageIsHas = NO;
[self setBark:theImgStr onFial:aFail];
// successHandler(NO);
}else{
successHandler();
NSLog(@"tmpListAsset : %@", asset);
}
} failureBlock:^(NSError *error) {
// Type your code here for failure (when user doesn't allow location in your app)
// fialHandler();
findImageIsHas = NO;
NSLog(@"error :%@",error.description);
[self setBark:theImgStr onFial:aFail];
}];
}else {
findImageIsHas = NO;
// fialHandler();
[self setBark:theImgStr onFial:aFail];
}
}else {
findImageIsHas = NO;
// fialHandler();
[self setBark:theImgStr onFial:aFail];
}
// 试着相同的方法只写一次的处理,这里有点累赘
}
// 不存在的时候保存图片--
+(NSError *) setBark:(NSString *)urlStr onFial:(void (^)(BOOL isSaved))fialHandler
{
__block NSError * errorReturn = nil;
NSData *dataimage = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlStr]];
UIImage *image = [UIImage imageWithData:dataimage];
ALAssetsLibrary *assetLib = [[ALAssetsLibrary alloc] init];
[assetLib writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){
[assetLib release];
if (error == nil) {
NSLog(@"save image successed: %@",[assetURL description]);
[self saveImageUrl:[assetURL description] forKey:urlStr];
// [ManagerImagesLocal shareFactory].yk_failHander(YES);
fialHandler(NO);
}else {
NSLog(@"save image field: %@",assetURL);
errorReturn = error;
fialHandler(YES);
}
}];
return errorReturn;
}
// 附加方法
+(void)saveImageUrl:(NSString *)imgUrl forKey:(NSString *)key
{
NSString *imageDocPath = [self dataFilePath];//[documentPath stringByAppendingPathComponent:@"LocaImageField"];
//获取文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isFlag;
if ([fileManager fileExistsAtPath:imageDocPath isDirectory:&isFlag]) {
NSMutableDictionary *dicfiel = [NSMutableDictionary dictionaryWithContentsOfFile:imageDocPath];
[dicfiel setObject:imgUrl forKey:key];
[dicfiel writeToFile:imageDocPath atomically:YES];
}else {
NSDictionary *dicSave = [NSDictionary dictionaryWithObjectsAndKeys:imgUrl,key, nil];
[dicSave writeToFile:imageDocPath atomically:YES];
}
}
+(NSString *)dataFilePath:(NSString *)fieldPath
{
//获取Documents文件夹目录
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory=[paths objectAtIndex:0];
//指定新建文件夹路径
return [documentDirectory stringByAppendingPathComponent:fieldPath];
}
+(NSString *)dataFilePath
{
return [self dataFilePath:@"LocaImageField"];
}