Я пытаюсь взять этот Пример проекта Apple и использовать PHCacheImageManager
вместо PHImageManager по умолчанию.
В его нынешнем виде я не уверен, где первоначально кэшировать изображения или где удалять изображения, которые больше не нужны в кэше, когда пользователь прокручивает UICollectionView
. После установки переменной imageManager
в значение PHCacheImageManager
я извлекаю начальный набор ресурсов примерно так:
PHPhotoLibrary.requestAuthorization { (status: PHAuthorizationStatus) in
if status == .authorized {
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
self.fetchResults = PHAsset.fetchAssets(with: .image, options: fetchOptions)
self.fetchResults?.enumerateObjects({asset, index, stop in
self.assets.append(asset)
})
DispatchQueue.main.async {
// Reload collection view once we've determined our Photos permissions.
print("assets count: \(self.assets.count)")
self.collectionView.reloadData()
}
} else {
self.displayPhotoAccessDeniedAlert()
}
}
, но я не уверен, как изменить функции, которые будут иметь функциональность, аналогичную этой, посколькуНет установленного размера миниатюры, а добавленные и удаленные ресурсы зависят от прокрутки пользователя. Было бы правильно разместить код ниже в willDisplayCell
и didEndDisplayingCell
imageManager.stopCachingImages(for: removedAssets,
targetSize: thumbnailSize, contentMode: .aspectFill, options: nil)
imageManager.startCachingImages(for: addedAssets,
targetSize: thumbnailSize, contentMode: .aspectFill, options: nil)