So che c'è già a questa domanda su SO, ma non credo che la risposta fornita è soddisfacente/completo: How can IOS Photos app can show hundreds of photos in one screen?Come utilizzare PHCachingImageManager
Quello che voglio raggiungere
I vuoi qualcosa come la selezione dell'immagine in whatsapp (iOS) (vedi screenshot). Quando apri la videocamera, c'è anche un cursore orizzontale in cui puoi vedere tutte le immagini dalla tua galleria.
Quello che ho provato
In questo momento ho il seguente codice nel mio 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)
}
Più tardi ho caricare le immagini in un UITableViewController e chiamare la seguente funzione su scroll:
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()
})
}
Funziona bene, ma ho il problema che in ogni app tutte le mie risorse vengono messe in cache. È questo l'approccio giusto per il mio problema? Come posso visualizzare le foto della galleria in tempo reale come fa whatsapp?
Perché vuoi le risorse quando puoi recuperarle di nuovo? Archiviarli può essere complicato in quanto alcune risorse potrebbero essere state eliminate/aggiunte/modificate dopo che la tua app è stata uccisa. Inoltre non devi recuperarli tutti di nuovo. Dovresti semplicemente recuperare quelli necessari per mostrare all'utente sullo schermo in quel momento. Un certo contesto sulla necessità di archiviarli aiuterebbe. – jarora
@jarora Ho modificato la mia intera domanda, fornito codice e un esempio che voglio raggiungere. –