2016-10-11 2 views
0

Beim Laden von Images aus Firebase und anschließendes Auffüllen in die Zellen scheint eine abgehackte Performance zu bestehen. Ich denke, es könnte sein, weil die Bilder nicht zwischengespeichert werden.CollectionsKeine abgehackte Leistung anzeigen, wenn Bilder von einer URL aus Firebase geladen werden

Dies wird in der Funktion befindet URL aus den zurückSuchErgebnisse zu sammeln unmittelbar nach viewDidLoad()

let databaseRef = FIRDatabase.database().reference() 

      databaseRef.child("palettes").queryOrdered(byChild: "top").queryEqual(toValue: "#000000").observeSingleEvent(of: .value, with: { (snapshot) in 


       if let snapDict = snapshot.value as? [String:AnyObject]{ 

        for each in snapDict as [String:AnyObject]{ 

         let URL = each.value["URL"] as! String 
         self.URLArray.append(URL) 

         print(self.URLArray) 
        } 
       } 
      }) 

Und hier ist die Funktion, die Zellen zu füllen:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) 
     let textLabel = cell.viewWithTag(2) 

     let ootdImage = cell.viewWithTag(4) as! UIImageView 

     if let url = NSURL(string: self.URLArray[indexPath.row]) { 
      if let data = NSData(contentsOf: url as URL){ 
       ootdImage.image = UIImage(data: data as Data) 
      } 
     } 

     // display images from the dataArray. 
     textLabel?.backgroundColor = averageColor 

     return cell 

Keine Sorge Über collectionsView.reloadData(), habe ich es derzeit so eingestellt, dass ich manuell auf eine Schaltfläche tippen muss, um Daten neu zu laden, aber ich verstehe immer noch nicht, warum es eine Verzögerung im Scrollen gibt, besonders da alle Daten bereits gesammelt wurden.

Antwort

1

Die Leistung ist gering, weil Sie jedes Bild aus dem Hauptthread herunterladen, das das UI.Download-Bild asynchron blockiert und die Sammlungsansichtszelle aktualisiert. Dadurch wird das Leistungsproblem gelöst.

Wenn Sie blättern, wird jedes Bild, das der Zelle zugeordnet ist, im Hauptthread heruntergeladen und verursacht ein verzögertes Scrollen.

+0

Danke, dass es funktioniert, ich habe es so eingestellt, dass die Handhabung des Herunterladens und Konvertierens von Daten zu UIImage auf einer separaten Funktion erfolgt. Aber es gibt immer noch eine Verzögerung beim Herunterladen und Anzeigen von Bildern. –

Verwandte Themen