Ich spreche von Dingen wie insertItemsAtIndexPaths
oder moveItemAtIndexPath:toIndexPath:
. Ich habe versucht, es in einen Animationsblock zu verpacken, aber das hat nicht funktioniert. Es scheint, dass die Animationen bei .25 oder .3 Sekunden hängen bleiben, aber ich möchte das verlangsamen. Abgesehen davon, dass ich die Bewegung selbst implementiere, was den Aufwand nicht wert ist, weiß jemand, ob dies mit öffentlichen APIs möglich ist?Gibt es eine Möglichkeit, die Geschwindigkeit der Animationen für UICollectionViews zu ändern?
Antwort
Absolut! Aber Sie können es nicht richtig mit UIView
Animation Blöcke machen. Sie müssen sich in Core Animation einarbeiten.
Die Sammlungsansicht fügt dem CALayer
, der alle UICollectionViewCell
unterstützt, Animationen hinzu. Wenn Sie jedoch ein eigenes Layout (oder eine Unterklasse eines vorhandenen) implementieren, können Sie alle notwendigen Änderungen an diesen Animationen in der finalizeCollectionViewUpdates
Methode vornehmen.
Von der UICollectionViewLayout
Klasse Dokumentation:
Die Sammlung Ansicht ruft diese Methode als letzten Schritt, bevor Sie Änderungen an ihrem Platz zu animieren vorhergehenden.
Hier ist ein Beispiel dafür, wie die Standardposition Animation mit Ihrer eigenen ersetzen:
- (void)finalizeCollectionViewUpdates
{
for (UICollectionViewCell *cell in [self.collectionView visibleCells])
{
CAAnimation *positionAnimation = [cell.layer animationForKey:@"position"];
if (positionAnimation)
{
[cell.layer removeAnimationForKey:@"position"];
CALayer *presentationLayer = cell.layer.presentationLayer;
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
[animation setFromValue:[NSValue valueWithCGPoint:presentationLayer.position]];
[animation setToValue:[NSValue valueWithCGPoint:cell.layer.position]];
[animation setDuration:0.4];
[cell.layer addAnimation:animation forKey:@"position"];
}
}
}
Schauen Sie sich die Animation bezogenen Methoden auf CALayer
zu sehen, wie Sie in welche Animation zur Zeit graben laufen auf deiner Ebene.
Mit diesem Ansatz können Sie sogar kreativ werden und Overshooting/Bounce-Effekte mit CAKeyframeAnimation
oder etwas, was Sie sich vorstellen können, hinzufügen. Sie können auch bestimmte Animationen (wie die Größe) selektiv deaktivieren und andere (wie die Position) beibehalten.
Vervielfältigung dieser über von hier: https://stackoverflow.com/a/18392148/1751266
Sie können jede beliebige Animationsgeschwindigkeit mit CALayer ändern. Also für UICollectionView sieht dies wie folgt aus:
[self.collectionView.viewForBaselineLayout.layer setSpeed:0.1f];
Und Sie können die ursprüngliche Geschwindigkeit ändern zurück:
#import <QuartzCore/QuartzCore.h>
:
[self.collectionView.viewForBaselineLayout.layer setSpeed:1.0f];
Dazu Sie Quartz importieren müssen arbeiten Bedenken Sie jedoch, dass sich dies auf alle anderen Animationen auf derselben Ebene auswirkt, einschließlich animierter UIImageViews und so, dass sie möglicherweise kompensiert werden müssen.
- 1. Gibt es eine Möglichkeit, die Geschwindigkeit einer ScrollView zu berechnen?
- 2. Gibt es eine Möglichkeit, alle PrimeFaces-Animationen zu deaktivieren?
- 3. Twilio Twimlets - Gibt es eine Möglichkeit, die Stimme zu ändern?
- 4. Gibt es eine Möglichkeit, die Standardstartposition des Emulators zu ändern?
- 5. Gibt es eine Möglichkeit, die Schriftart JOptionPane.showMessageDialog zu ändern?
- 6. Gibt es eine Möglichkeit, Standardschriftart für Ihre Anwendung zu ändern
- 7. Gibt es eine Möglichkeit, die Rails secret_key_base elegant zu ändern?
- 8. Gibt es eine Möglichkeit, die Zeit stapelweise zu ändern?
- 9. Mit Core Animation, gibt es eine Möglichkeit, Animationen für mehrere CALayers zu gruppieren?
- 10. c3js: Gibt es eine Möglichkeit, die Schriftgröße zu ändern?
- 11. Gibt es eine Möglichkeit, zwei jQuery-Animationen gleichzeitig (richtig) auszuführen?
- 12. Gibt es eine Möglichkeit zu verhindern, dass UIImagePickerController Statusleiste ändern?
- 13. Gibt es eine Möglichkeit, ein Etikett mit c3js zu ändern?
- 14. Gibt es eine Möglichkeit, die Geschwindigkeit von shapely.geometry.shape.contains (a_point) zu optimieren?
- 15. Gibt es eine Möglichkeit, die Geschwindigkeit von sshfs auf Amazon AWS zu verbessern?
- 16. Gibt es eine Möglichkeit, Animationen in GitHub während der Navigation durch Code zu deaktivieren?
- 17. Gibt es eine Möglichkeit, etwas in mysql gleich zu ändern?
- 18. Gibt es eine Möglichkeit, einen laufenden Countdown zu ändern?
- 19. Gibt es eine Möglichkeit, die Reihenfolge der Titel in der Wiedergabeliste zu ändern?
- 20. Gibt es eine Möglichkeit zum Ändern der Zeichnungsreihenfolge in WPF
- 21. Gibt es eine Möglichkeit, ConfigurationManager.AppSettings zu überschreiben?
- 22. Gibt es eine Möglichkeit, den Besitzer eines JDialogs zu ändern?
- 23. Gibt es eine Möglichkeit, aus einer foreach-Schleife in der Geschwindigkeit zu brechen?
- 24. Gibt es eine Möglichkeit, die Farbe der Android-Statusleiste mit React Native zu ändern?
- 25. Gibt es eine Möglichkeit, die Umgebung für bestimmte Methoden im Controller zu ändern? - CakePHP 2.x
- 26. gibt es eine Möglichkeit, die Farbpalette für GGally :: ggpairs mit ggplot zu ändern?
- 27. Gibt es eine Möglichkeit, eine inaktive Registerkarte zu zwingen, JavaScript mit normaler Geschwindigkeit auszuführen
- 28. .NET - Gibt es eine Möglichkeit, das GC-Verhalten für die gesamte Maschine zu ändern?
- 29. Gibt es eine Möglichkeit, die Dauer von zoomToRect für UIScrollView zu ändern?
- 30. Gibt es eine Möglichkeit, die Pixel eines UIImage zu analysieren?