之前,我们通常都是取iOS系统相册里的照片,一般都是这种方式
PHFetchOptions *allPhotosOptions = [[PHFetchOptions alloc] init];
// 按创建时间升序
allPhotosOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
// 获取所有照片(按创建时间升序)
PHFetchResult *allPhotos = [PHAsset fetchAssetsWithOptions:allPhotosOptions];
for (PHAsset *asset in allPhotos) {
if (asset.mediaType == PHAssetMediaTypeImage) {
file.pickerType = XLPickerFileTypeImage;
[photos addObject:file];
}else if (asset.mediaType == PHAssetMediaTypeVideo){
file.pickerType = XLPickerFileTypeVideo;
[videos addObject:file];
}
}
然而后来发现,大部分的场景是需要获取最近项目的文件排序(虽然系统相册里包含了所有照片),一些APP都是这么做的,比如微信,QQ等
自己尝试了一些方法,发现加 sortDescriptors的排序方式,就是各种不行,总是和相册里的排序方式不同。后面的方式中,发现把sortDescriptors 去除,默认就是最近项目的逆序,然后倒过来不就OK了吗? 话不多说,酸菜,上代码!
PHFetchOptions *allPhotosOptions = [[PHFetchOptions alloc] init];
// 按创建时间升序
// allPhotosOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
// 获取所有照片(按创建时间升序)
PHFetchResult *allPhotos = [PHAsset fetchAssetsWithOptions:allPhotosOptions];
[allPhotos enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
PHAsset *asset = (PHAsset *)obj;
if (asset.mediaType == PHAssetMediaTypeImage) {
file.pickerType = XLPickerFileTypeImage;
[photos addObject:file];
}else if (asset.mediaType == PHAssetMediaTypeVideo){
file.pickerType = XLPickerFileTypeVideo;
[videos addObject:file];
}
}];
网友评论