我正在尝试显示所有用户图片,这些图片按日期在UICollectionView
和PhotoKit上分组。
但是下面我做的方法有一个问题,那就是当设备上有更多图片时,它需要更多的时间。
//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
20
,其他:2000
main queue
上运行,其他获取在background queue
上运行insertSections(:)
上使用main thread
更新集合视图