是否有任何不错的方法来获取PhotoKit上按日期分组的PHAsset列表?

时间:2019-10-18 15:53:41

标签: ios swift photokit

我正在尝试显示所有用户图片,这些图片按日期在UICollectionViewPhotoKit上分组。

但是下面我做的方法有一个问题,那就是当设备上有更多图片时,它需要更多的时间。

我的方法

//1. Get `PHFetchResult` 
let allPhotosOptions = PHFetchOptions()
allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
let fetchResult = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: allPhotosOptions)

// 2. Get all `PHAsset`
var assets: [PHAsset] = []
fetchResult.enumerateObjects { (asset, _, _) in
    assets.append(asset)
}

// 3. Group by date
var assetGroupDictionary: [String: AssetGroup] = [:]
for asset in assets {
    let dateKey = asset.creationDate.creationDateKey // "2019.10.19"
    if assetGroupDictionary[dateKey] != nil {
        assetGroupDictionary[dateKey]?.assets.append(asset)
    } else {
        assetGroupDictionary[dateKey] = AssetGroup(title: dateKey, assets: [asset])
    }
}
assetGroups = assetGroupDictionary.map { $0.value }
assetGroups.sort { $0.title > $1.title }

我想分组的PHAsset列表可能与PHCollectionList有关。但是我找不到正确的解决方案。

是否有一种不错的方法来获取按日期分组的PHAsset列表?

我的改进方法:通过批处理方法异步获取

更新:2019.11.21

过程

  1. 按批次大小划分总资产。
  2. 具有批处理大小的组资产
    • 第一批大小:20,其他:2000
    • 第一次获取在main queue上运行,其他获取在background queue上运行
    • 每次提取后,在insertSections(:)上使用main thread更新集合视图

0 个答案:

没有答案