wiem, że nie ma już na to pytanie na SO, ale nie sądzę, że dana odpowiedź jest satysfakcjonująca/pełna: How can IOS Photos app can show hundreds of photos in one screen?Jak korzystać PHCachingImageManager
Co chcę osiągnąć
I chcą czegoś takiego jak wybór obrazu w WhatsApp (iOS) (patrz zrzut ekranu). Po otwarciu aparatu znajduje się również poziomy suwak, w którym można zobaczyć wszystkie obrazy z galerii.
Co próbowałem
Teraz mam następujący kod w moim 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)
}
Później załadować obrazy w UITableViewController i wywołać następującą funkcję przewiń:
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()
})
}
Działa to dobrze, ale mam problem z tym, że przy każdym uruchomieniu aplikacji wszystkie moje zasoby są buforowane. Czy to właściwe podejście do mojego problemu? Jak mogę wyświetlać zdjęcia galerii w czasie rzeczywistym, na przykład WhatsApp?
Dlaczego chcesz skorzystać z zasobów, gdy możesz je ponownie pobrać? Przechowywanie ich może być trudne, ponieważ niektóre zasoby mogły zostać usunięte/dodane/zmodyfikowane po zabiciu aplikacji. Nie musisz też pobierać ich wszystkich ponownie. Powinieneś po prostu pobrać te, które chcesz pokazać użytkownikowi na ekranie w tym czasie. Pomogłoby to w pewnym kontekście potrzeby przechowywania. – jarora
@jarora Edytowałem całe moje pytanie, pod warunkiem podania kodu i przykładu, który chcę osiągnąć. –