UICollectionView animiert Elemente, nachdem reloadItemsAtIndexPaths aufgerufen wurde (Animation verblassen).
Gibt es eine Möglichkeit, diese Animation zu vermeiden?
iOS 6
Sie können dies auch versuchen:
UICollectionView *collectionView;
...
[UIView setAnimationsEnabled:NO];
[collectionView performBatchUpdates:^{
[collectionView reloadItemsAtIndexPaths:indexPaths];
} completion:^(BOOL finished) {
[UIView setAnimationsEnabled:YES];
}];
Ich habe auch festgestellt, dass performBatchUpdates
beim Umschließen eines UIView-Animationsblocks die UIView-Animation anstelle der Standardanimation verwendet wird, sodass Sie die Animationsdauer wie folgt auf 0 setzen können:
[UIView animateWithDuration:0 animations:^{
[collectionView performBatchUpdates:^{
[collectionView reloadItemsAtIndexPaths:indexPaths];
} completion:nil];
}];
Dies ist besonders cool, wenn Sie beim Einfügen und Löschen federnde iOS 7-Animationen verwenden möchten!
performBatchUpdates
Innen einwickelnanimateWithDuration
ist genial! Danke für den Tipp!Es ist erwähnenswert, dass Sie die neue
UIView
Methode verwenden können, wenn Sie auf iOS 7 und höher abzielenperformWithoutAnimation:
. Ich vermute, dass dies unter der Haube ähnlich funktioniert wie die anderen Antworten hier (vorübergehende Deaktivierung vonUIView
Animationen / Core-Animationsaktionen), aber die Syntax ist nett und sauber.Also gerade für diese Frage ...
Ziel c:
Schnell:
Natürlich kann dieses Prinzip auf jede Situation angewendet werden, in der Sie sicherstellen möchten, dass eine Änderung nicht animiert wird.
quelle
Ich gehe davon aus, dass Sie ein FlowLayout verwenden. Versuchen Sie Folgendes, da Sie versuchen, die Überblendungsanimation zu entfernen:
Dies ist eine sehr alte Frage, daher zielen Sie wahrscheinlich nicht mehr auf iOS 6 ab. Ich habe persönlich an tvOS 11 gearbeitet und hatte die gleiche Frage. Dies ist also für alle da, die das gleiche Problem haben.
quelle
Ich habe eine Kategorie auf UICollectionView geschrieben , um genau das zu tun. Der Trick besteht darin, alle Animationen beim Neuladen zu deaktivieren:
quelle
CATransaction.setDisableActions(true)
als Abkürzung tun .Hier ist eine Swift 3 Version
performBatchUpdates
ohne Animation zu einemUICollectionView
. Ich fand, dass dies für mich besser funktioniert, alscollectionView.reloadData()
weil es das Austauschen von Zellen beim Einfügen von Datensätzen verringert.quelle
quelle
quelle
Um meine $ 0,02 hinzuzufügen, habe ich beide Versionen der ausgewählten Antwort ausprobiert, und die ursprüngliche Methode hat für meine Zwecke besser funktioniert. Ich arbeite an einer unendlichen Bildlauf-Kalenderansicht, mit der ein Benutzer den Kalender zu einer bestimmten Woche eingeben und dann hin und her wischen und einzelne Tage zum Filtern einer Liste auswählen kann.
In meiner Implementierung muss die Anzahl der Daten, die die Kalenderansicht darstellen, relativ klein gehalten werden, um die Leistung auf älteren Geräten zu gewährleisten. Dies bedeutet, dass Daten im Wert von etwa 5 Wochen gespeichert werden, wobei sich der Benutzer in der 3. Woche in der Mitte befindet. Das Problem bei der Verwendung des zweiten Ansatzes besteht darin, dass Sie in einem zweiten Schritt die Sammlungsansicht ohne Animation zurück in die Mitte scrollen müssen, was aus irgendeinem Grund bei der blockierten Basisanimation zu einem sehr gezackten Erscheinungsbild führt.
Mein Code:
quelle