Moin zusammen,
nachdem ich in meiner App viele Tableviews verwende, dachte ich warum nicht mal ein wenig Abwechslung.
Also habe ich mir die Collectionviews einmal angesehen. Der Aufbau ist nach ein bisschen Einarbeitung gelungen.
Jetzt gibts hier aber ein mysteriöses Bildflackern was ich irgendwie nicht in den Griff bekomme.
Alles anzeigen
Immer wenn ich eine Cell anklicke, dann in den anderen ViewController komme, und von diesem durch:
zurück zum Collectionview komme, werden die Bilder natürlich neu geladen und dann habe ich z.B. das Bild der letzten Cell
für eine Sekunde oben links in der 1. Cell. Natürlich sortiert sich alles wieder richtig, aber es sieht einfach total blöd aus.
Das erste Füllen und updaten der Collectionview mache ich hier:
Was mir jetzt schon etwas komisch vorkommt, ist die Tatsache, dass die Collectionview-Funktion die die Cells baut, ja bei jedem
Scrollen erneut ausgeführt wird. Das bedeutet dann ja, dass auch die Bilder permanent neu geladen werden oder? Ist das so richtig?
Wie würdet ihr diesen Aufbau machen? Habt ihr einen Tip für mich? Vielen Dank!
Viele Grüße
David
nachdem ich in meiner App viele Tableviews verwende, dachte ich warum nicht mal ein wenig Abwechslung.
Also habe ich mir die Collectionviews einmal angesehen. Der Aufbau ist nach ein bisschen Einarbeitung gelungen.
Jetzt gibts hier aber ein mysteriöses Bildflackern was ich irgendwie nicht in den Griff bekomme.
Quellcode
- func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
- let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! CollectionViewCellDemo
- var imageUrlString = ""
- // BILD URL PRÜFEN UND KORRIGIEREN
- let imageUrlDB = datastructarray[(indexPath as NSIndexPath).item].imageUrl as String
- if(imageUrlDB == "none.png"){
- imageUrlString = "https://images.webserver.de/"+imageUrlDB
- }else if(imageUrlDB as String == ""){
- imageUrlString = "https://images.webserver.de/none.png"
- }else{
- imageUrlString = imageUrlDB
- }
- // CHECK OB BILD DOWNLOADBAR
- if let url = URL(string: imageUrlString) {
- if (try? Data(contentsOf: url)) != nil {
- }else{
- imageUrlString = "https://images.webserver.de/none.png"
- }
- }
- DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
- let imageUrl: URL = URL(string: imageUrlString)!
- let imageData: Data = try! Data(contentsOf: imageUrl)
- let imageview: UIImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 165, height: 162))
- let image: UIImage = UIImage(data: imageData)!
- //imageview.image = nil
- imageview.image = image
- DispatchQueue.main.async {
- cell.contentView.addSubview(imageview)
- }
- }
- return cell
- }
Immer wenn ich eine Cell anklicke, dann in den anderen ViewController komme, und von diesem durch:
zurück zum Collectionview komme, werden die Bilder natürlich neu geladen und dann habe ich z.B. das Bild der letzten Cell
für eine Sekunde oben links in der 1. Cell. Natürlich sortiert sich alles wieder richtig, aber es sieht einfach total blöd aus.
Das erste Füllen und updaten der Collectionview mache ich hier:
Scrollen erneut ausgeführt wird. Das bedeutet dann ja, dass auch die Bilder permanent neu geladen werden oder? Ist das so richtig?
Wie würdet ihr diesen Aufbau machen? Habt ihr einen Tip für mich? Vielen Dank!
Viele Grüße
David