Cla*_*nce 3 iphone xcode uiimagepickercontroller ipad ios
当我使用下面的代码从iphone加载相册时,我遇到了问题.虽然我装的很完美,但第一张照片出现的却是最古老的照片.是否可以重新排列顺序,以便我可以先获取最新的照片,然后是时间,最后的是后面的照片?
- (IBAction)imageFromAlbum:(id)sender
{
imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentViewController:imagePicker animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
要实现您的目标,您必须使用资产库框架创建自己的自定义照片选择器.根据您使用的ios版本,您可以使用UICollectionViewController(ios6以上)或者必须创建自己的版本.
要获取已保存照片相册中的所有照片/资源,请执行此方法,然后使用属性ALAssetPropertyDate按降序顺序使用创建日期对对象进行排序
thisVC.assetArray将是您的自定义表或集合视图控制器的数据源.这两个方法是异步的,因此一旦数据源完成,您将需要刷新tableView或collectionView
__block YourViewController *thisVC = self;
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
[self enumerateAssetForGroup:group forFilter:[ALAssetsFilter allPhotos] withCompletionBlock:^(id object) {
thisVC.assetArray = object;
[thisVC.assetArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSDate *date1 = [obj1 valueForProperty:ALAssetPropertyDate];
NSDate *date2 = [obj2 valueForProperty:ALAssetPropertyDate];
return ([date1 compare:date2] == NSOrderedAscending ? NSOrderedDescending : NSOrderedAscending);
}];
//in case of table
[thisVC.tableView reloadData];
//in case of collection view
//reload collection view controller data
}];
}
} failureBlock:nil];
- (void)enumerateAssetForGroup:(ALAssetsGroup*)group forFilter:(ALAssetsFilter*)filter withCompletionBlock:(ALAssetsEnumeration)enumerationCompletionBlock {
[group setAssetsFilter:filter];
__block NSInteger assetsCount = [group numberOfAssets];
__block NSMutableArray *assetArray = [[NSMutableArray alloc] init];
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
[assetArray addObject:result];
if (*stop) {
enumerationCompletionBlock(assetArray);
[assetArray release];
}
}
else if (assetsCount == 0) {
enumerationCompletionBlock(nil);
}
}];
}
Run Code Online (Sandbox Code Playgroud)
用第一种方法编写的这部分将按降序对数组进行排序,
[thisVC.assetArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSDate *date1 = [obj1 valueForProperty:ALAssetPropertyDate];
NSDate *date2 = [obj2 valueForProperty:ALAssetPropertyDate];
return ([date1 compare:date2] == NSOrderedAscending ? NSOrderedDescending : NSOrderedAscending);
}];
Run Code Online (Sandbox Code Playgroud)
试试这个,如果你真的想:)