之前,我們通常都是取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];
}
}];