iOS photos 拿取"最近项目"相册里的照片

2019-11-18  本文已影响0人  怕腥的鱼

之前,我们通常都是取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];
       }
   }];
上一篇下一篇

猜你喜欢

热点阅读