Я знаю, что на SO уже есть этот вопрос, но я не думаю, что данный ответ является удовлетворительным/полным: Как приложение IOS Photos может отображать сотни фотографий на одном экране?
Чего я хочу достичь
Я хочу что-то вроде выбора изображения в WhatsApp (iOS) (см. скриншот). Когда вы открываете камеру, вы также видите горизонтальный слайдер, где вы можете увидеть все изображения из вашей галереи.
Что я пробовал
Прямо сейчас у меня есть следующий код в моем appDelegate:
let options = PHFetchOptions()
options.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: true)
]
if let results = PHAsset.fetchAssetsWithMediaType(.Image, options: options) {
results.enumerateObjectsUsingBlock { (object, idx, _) in
if let asset = object as? PHAsset {
Variables.assets.append(asset)
}
}
println(Variables.assets.count)
Variables.imageManager.startCachingImagesForAssets(Variables.assets, targetSize: CGSizeMake(viewWidth, viewWidth), contentMode: .AspectFill, options: self.requestOptions)
}
Позже я загружаю изображения в UITableViewController и вызываю следующую функцию при прокрутке:
func fetchPhotoAtIndex(index : Int) {
let asset = Variables.assets[Variables.assets.count - 1 - index] as PHAsset
Variables.imageManager.requestImageForAsset(asset, targetSize: CGSizeMake(self.viewWidth, self.viewWidth), contentMode: .AspectFill, options: self.requestOptions, resultHandler: { (image, _) in
println("\(asset.localIdentifier) \(asset.creationDate) ")
[...]
self.tableView.reloadData()
})
}
Это работает хорошо, но у меня проблема в том, что при каждом запуске приложения все мои активы кэшируются. Это правильный подход для моей проблемы? Как я могу отображать фотографии галереи в режиме реального времени, как это делает WhatsApp?