UICollectionView moveItemAtIndexPath: toIndexPath: Gibt das Verschieben von Elementen auf dem Bildschirm aus

9

Ich versuche, eine Umsortierung von Elementen in UICollectionView auf iOS 6 zu animieren.

Ich habe diesen Code geschrieben:

%Vor%

Zuerst speichere ich alle aktuellen Positionen der Elemente in einem Wörterbuch, sortiere dann die Elemente in neue Positionen, gehe dann alle Elemente durch und verschiebe sie von der alten Position zur Neues.

Dies funktioniert hervorragend, wenn alle Elemente auf dem Bildschirm angezeigt werden, aber wenn die Liste länger als 10 ist, wodurch einige Elemente derzeit nicht sichtbar sind (da sie über oder unter dem sichtbaren Bereich der Liste liegen), verursacht dies diese Elemente in sichtbaren Indizes plötzlich auftauchen und an andere Orte animiert werden, und wenn die Animation aufhört, sind sie versteckt. Das sieht wirklich bizarr aus, da es Gegenstände gibt, die über anderen stehen ...

Ist das ein Problem mit iOS 6 UICollectionView, und mache ich hier etwas falsch?

    
marmor 04.12.2012, 07:49
quelle

1 Antwort

5

Es sieht so aus, als ob UICollectionView Zellen wiederbenutzt, so dass Ihre Animation schlecht aussieht. Alle Zellen, die außerhalb des Bildschirms angezeigt werden, können wieder verwendet werden.

Warum sieht Ihre Animation funky aus?

Der Anfangs- und Endort einer Zelle, und wenn sie versteckt wird oder nicht, wird automatisch erledigt, wenn Sie Zellen herum bewegen. Damit diese Animationen gut aussehen, müssen Sie auch Ihre Datenquelle aktualisieren, da der Code dazu verwendet wird, zu bestimmen, wo die Zellen während der Animation beginnen und enden sollen.

Stellen Sie vor dem Aufrufen des Indexaktualisierungsblocks sicher, dass die Datenquelle mit den neuen Indexstandorten aktualisiert wurde. Auf diese Weise hat Apples Code die Informationen, die er benötigt, um Ihre Zellen auf eine, sagen wir, ästhetisch ansprechende Weise zu bewegen.

Von Apple-Dokumentation zu UICollectionViews :

  

Um einen einzelnen Abschnitt oder ein Element einzufügen, zu löschen oder zu verschieben, müssen Sie die folgenden Schritte ausführen:

     
  1. Aktualisieren Sie die Daten in Ihrem Datenquellenobjekt.
  2.   
  3. Rufen Sie die entsprechende Methode der Sammlungsansicht auf, um den Abschnitt oder das Element einzufügen oder zu löschen.
  4.   

Es ist wichtig, dass Sie Ihre Datenquelle aktualisieren, bevor Sie die Sammlungsansicht von Änderungen benachrichtigen. Die Methoden der Sammlungsansicht gehen davon aus, dass Ihre Datenquelle die aktuell korrekten Daten enthält. Ist dies nicht der Fall, erhält die Sammlungsansicht möglicherweise die falsche Gruppe von Elementen aus Ihrer Datenquelle oder fragt nach Elementen, die nicht vorhanden sind, und führt zum Absturz Ihrer App.

    
redlightbulb 09.12.2012, 21:06
quelle