2016-09-28 5 views
1

Ich arbeite mit dem Photos-Framework in iOS, um ein Overlay für meine App zu entwickeln, das ähnlich wie ein WhatsApp-Overlay funktioniert. Um Zugriff auf die Galerie-Bild-Assets des Benutzers zu erhalten, muss ich Fotos verwenden und komme nicht mit UIImagePickerController davon.PHCachingImageManager nicht zwischengespeichert Swift 2.3

Um besser mit dem Framework vertraut zu werden, entschied ich mich, zuerst meinen eigenen Bilderwähler zu erstellen und ich begann mit dem Laden von Bildern aus meiner Galerie und legte sie auf einem einfachen Bildschirm in eine Sammlungsansicht. Sobald ich das Vermögen bekam mit PHAsset.fetchAssets(with: .image, options: fetchOptions) as PHFetchResult<PHAsset>

Dann benutze ich diese Vermögenswerte in einem Array und starten Sie das Caching im Standard PHCachingManager wie folgt:

cachingImageManager.startCachingImages(for: self.assets, 
               targetSize: CGSize(width: 150.0, height: 150.0), 
               contentMode: .default, 
               options: nil) 

In meinem cellForItemAtIndexPath für die Collection, die ich benutze:

cachingImageManager.requestImage(for: assets[indexPath.row], targetSize: CGSize(width: 150.0, height: 150.0), contentMode: .default, options: nil, resultHandler: { (image, info) in 
     cell.imageView.image = image 
    }) 

Wie in der Apple-Dokumentation zu sehen ist, benutze ich Caching mit genau der gleichen targetSize, contentMode und Optionen an beiden Stellen und daher sollte der Callback-Block, wo ich das Bild gesetzt habe, genau einmal mit dem high aufgerufen werden Quali ty Bild.

Wenn ich jedoch die CollectionView oder sogar beim ersten Laden der Sammlungsansicht neu lade, wird der Rückruf zweimal aufgerufen, einmal mit einem Bild niedriger Qualität und das zweite Mal mit einem Bild hoher Qualität.

Ich kann nicht umhin zu denken, dies ein Fehler ist, wie ich Apple's tutorial code für Fotos Rahmen heruntergeladen und es macht genau das, was auch wenn der Doc sagt ausdrücklich, dass, wenn wir die gleichen Optionen, contentMode und targetSize für einen Vermögenswert senden Sie es, wird nur einmal aufgerufen, wenn es zwischengespeichert wird. (Auch der Tutorial-Code lädt zuerst ein Bild niedriger Qualität, gefolgt von einem qualitativ hochwertigen Bild, unabhängig davon, wie oft Sie die Sammlung neu laden).

Jede Hilfe würde sehr geschätzt werden, da ich neu in AVFoundation Codierung bin und durch dieses Problem ratlos war.

Es tut mir leid, wenn das wirklich lange gelesen wurde, aber danke im Voraus für jede Hilfe!

+0

Probieren Sie Kingfisher Rahmen für Bildfang einfach zu bedienen und erhalten Sie Pod gemäß Ihrer schnellen Version. –

+0

Ich brauche nur Galerie Bilder obwohl ich nichts herunterladen muss – Kunal

Antwort

0

deliveryMode über PHImageRequestOptions und Eigentum Lesen Sie wahrscheinlich der Standardwert wird auf opportunistic

Fall opportunistische

Fotos automatisch stellt eine oder mehrere Ergebnisse, um die Bildqualität und Reaktionsgeschwindigkeit zu balancieren.

Verwandte Themen