Meine UICollectionView ruft Bilder in cellForItemAt
ab. Nachdem ich auf swift 3 aktualisiert habe, werden einige Bilder nicht angezeigt, wenn ich sehr schnell blättern kann. Hier ist mein Code in cellForItemAt
:UICollectionView Ladebild kann nicht korrekt gesendet werden. Swift 3
if (imageNotInCache) {
DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {
if let thumb = imageFromPathAndCacheIt(path) {
DispatchQueue.main.async {
let updateCell = collectionView.cellForItem(at: indexPath) as! MyCustomCell? {
updateCell.imageView.image = thumb
}
}
}
Das Problem ist, manchmal bekomme ich updateCell
als null sogar auf dem Bildschirm ist (wahrscheinlich, weil blättern zu schnell).
Ich weiß, wir können hinzufügen reloadData
nach dem Hinzufügen des Bildes, genau wie: Swift 3: Caching images in a collectionView, aber ich möchte nicht so oft neu laden aufrufen.
Vielen Dank für Ihr Interesse an dieser Frage. Irgendwelche Ideen würden sehr geschätzt werden!
Vielen Dank für Ihre Antwort ! Dies kann dazu führen, dass alle Bilder in korrekten Zellen angezeigt werden. Aber das Ding scrollt jetzt zum ersten Mal ruckelt ... Ich frage mich, ob es einen Weg gibt, einfach die richtige Zelle zum Update zu bekommen? –
Keine Sorge! Hmm, ohne zu wissen, wie deine App funktioniert, bin ich mir nicht sicher! Möglicherweise müssen Sie Instrumente verwenden, um genau zu sehen, was den Haupt-Thread beim Scrollen blockiert. Nur für den Fall, dass Sie das nicht tun, wird das Bild einfach durch Erstellen eines 'UIImage' auf einem Hintergrund-Thread nicht in den Speicher decodiert. das passiert träge, wenn die Bildansicht auf dem Bildschirm erscheint. Dies kann in der Regel die meisten Bildlaufverzögerungen verursachen. Es gibt eine Menge Fragen zu SO darüber, wie man ein 'UIImage' explizit dazu zwingen kann, im Hintergrund vorher zu dekodieren: http://stackoverflow.com/questions/3904575/decode-images-in-background-thread – TiM
Es gibt auch ein Viele Optimierungen, die Sie im Allgemeinen durchführen können, um die Scroll-Leistung zu verbessern: https://medium.com/ios-os-x-development/perfect-smooth-scrolling-in-guidney-fd609d5275a5#.t8tw7ojhp – TiM