Ich weiß, dass es bereits diese Frage auf SO, aber ich glaube nicht, dass die gegebene Antwort befriedigend/Abschluss: How can IOS Photos app can show hundreds of photos in one screen?So verwenden PHCachingImageManager
Was ich
ich erreichen will Ich möchte etwas wie die Bildauswahl in WhatsApp (iOS) (siehe Screenshot). Wenn Sie die Kamera öffnen, gibt es auch einen horizontalen Schieberegler, wo Sie alle Bilder aus Ihrer Galerie sehen können.
Was habe ich versucht,
Im Moment habe ich den folgenden Code in meinem AppDelegate haben:
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)
}
Später lade ich die Bilder in einem UITableViewController und rufen Sie die folgende Funktion auf scrollen:
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()
})
}
Das funktioniert gut, aber ich habe das Problem, dass bei jedem Start alle meine Assets zwischengespeichert werden. Ist das der richtige Ansatz für mein Problem? Wie kann ich die Galerie-Fotos in Echtzeit wie WhatsApp anzeigen?
Warum möchten Sie die Vermögenswerte, wenn Sie sie wieder abrufen können? Das Speichern dieser Dateien kann knifflig sein, da einige Assets nach dem Absturz Ihrer App möglicherweise gelöscht/hinzugefügt/geändert wurden. Auch müssen Sie nicht alle von ihnen wieder holen. Sie sollten nur diejenigen holen, die Sie benötigen, um den Benutzer zu diesem Zeitpunkt auf dem Bildschirm zu zeigen. Ein gewisser Zusammenhang über die Notwendigkeit, sie zu speichern, würde helfen. – jarora
@jarora Ich habe meine ganze Frage bearbeitet, Code und ein Beispiel, das ich erreichen möchte. –