【问题标题】:How to sort uiimages by date from application folder in ios [duplicate]如何从ios中的应用程序文件夹中按日期对uiimages进行排序[重复]
【发布时间】:2013-11-28 19:04:29
【问题描述】:
如何通过从图库中对日期修改类型进行排序来显示图像。我可以使用
从文件夹中获取数据
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSFileManager *manager = [NSFileManager defaultManager];
还有如何按修改日期比较uiimage。
在此先感谢....
【问题讨论】:
标签:
ios
iphone
ios5
ios6
ios7
【解决方案1】:
为此,您必须使用 ALAssetsLibrary 来枚举图库中的所有图像。
从中您可以获取每个图像的属性:
并且你的答案就在这里:
您可以使用 ALAssetPropertyDate 属性检索资产的创建日期:
ALAsset* asset;
//do anthing
NSDate* date = [asset valueForProperty:ALAssetPropertyDate];
也许对你有帮助。
【解决方案2】:
最简单的方法:
- (void)images
{
//---Get directory from app folder
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSFileManager *manager = [NSFileManager defaultManager];
NSArray *imageFilenames = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil];
NSMutableArray *originalImage = [[NSMutableArray alloc]init];
for (int i = 1; i < [imageFilenames count]; i++)
{
NSString *imageName = [NSString stringWithFormat:@"%@/%@",documentsDirectory,[imageFilenames objectAtIndex:i] ];
UIImage *image = [UIImage imageWithContentsOfFile:imageName];
[originalImage addObject:image];
}
NSLog(@"\n\n\n Original images %@",originalImage);
//---------sorting image by date modified
NSArray* filelist_date_sorted;
filelist_date_sorted = [imageFilenames sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)
{
NSDictionary* first_properties = [[NSFileManager defaultManager] attributesOfItemAtPath:[NSString stringWithFormat:@"%@/%@", documentsDirectory, obj1] error:nil];
NSDate *first = [first_properties objectForKey:NSFileModificationDate];
NSDictionary *second_properties = [[NSFileManager defaultManager] attributesOfItemAtPath:[NSString stringWithFormat:@"%@/%@", documentsDirectory, obj2] error:nil];
NSDate *second = [second_properties objectForKey:NSFileModificationDate];
return [second compare:first];
}];
NSLog(@"\n\n\n date images %@",filelist_date_sorted);
NSMutableArray *sortedImage = [[NSMutableArray alloc]init];
//--- Store sorted images in array
for (int i = 1; i < [imageFilenames count]; i++)
{
NSString *imageName = [NSString stringWithFormat:@"%@/%@",documentsDirectory,[filelist_date_sorted objectAtIndex:i] ];
UIImage *image = [UIImage imageWithContentsOfFile:imageName];
if(!(image==nil))
{
[sortedImage addObject:image];
}
}
NSLog(@"\n\n\nsorted images %@",sortedImage);
}
【解决方案3】:
您可以使用此代码获取图像的属性
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:@"path/to/my/file" error:nil];
您可以使用此代码获取修改日期
NSDate *date = [attributes fileModificationDate];
创建 NSMutableDictionary 并将修改日期作为键和路径作为值。
NSMutableDictionary *imagesDict = [[NSMutableDictionary alloc] init];
for(NSString *path in paths)
{
NSDictionary *attributes = [[NSFileManager defaultManager] ;
NSDate *date = [attributes fileModificationDate];
imagesDict[date] = path; // key - date , value - path
}
然后就可以对imagesDict的key进行排序了
NSArray *sortedDates = [[imagesDict allKeys] sortedArrayUsingSelector:@selector(compare:)];
然后您可以为 sortedDates 项目创建循环并按图像的日期路径排序
for(NSDate *newDate in sortedDates)
{
NSString newPath = imagesDict[newDate];
}
【解决方案4】:
另一种解决方案:
-(NSArray *)orderedFileListByModificationDate{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dirPath = [paths objectAtIndex:0];
dirPath=[dirPath stringByAppendingString:@"/imgs"];
NSFileManager *fileManager=[[NSFileManager alloc] init];
NSDateFormatter *formatter=[[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zz"];
int filesCount;
NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dirPath error:NULL];
int dirFilesCount=(int)[directoryContent count];
NSMutableArray *fileObjects=[NSMutableArray array];
for (filesCount = 0; filesCount < dirFilesCount; filesCount++)
{
NSString *fileName=[directoryContent objectAtIndex:filesCount];
NSString *filePath =[NSString stringWithFormat:@"%@/%@",dirPath,fileName];
NSDictionary *fileAttributes=[fileManager attributesOfItemAtPath:filePath error:nil];
NSDate *dateModiftication=[fileAttributes valueForKey:@"NSFileModificationDate"];
NSMutableDictionary *datesAndFilesDict=[[NSMutableDictionary alloc] initWithCapacity:2];
[datesAndFilesDict setValue:fileName forKey:@"fileName"];
[datesAndFilesDict setValue:dateModiftication forKey:@"date"];
[fileObjects addObject:datesAndFilesDict];
}
NSLog(@"%@",fileObjects);
NSArray *newOrderedFileList = [fileObjects sortedArrayUsingComparator:
^(id obj1, id obj2) {
NSDate *dateOne=[(NSDictionary*)obj1 valueForKey:@"date"];
NSDate *dateTwo=[(NSDictionary*)obj2 valueForKey:@"date"];
NSComparisonResult result=[dateOne compare:dateTwo];
return result;
}];
NSLog(@"%@",newOrderedFileList);
//Now you've an array of dictionaries where you can pick the filename with the "fileName" key.
return newOrderedFileList;
}