Sto parlando di cose come insertItemsAtIndexPaths
o moveItemAtIndexPath:toIndexPath:
. Ho provato a confezionarlo in un blocco di animazione, ma non ha funzionato. Sembra che le animazioni siano bloccate a 0,25 o 3 secondi, ma vorrei rallentarlo. Oltre a implementare il movimento da solo, che non vale la pena, qualcuno sa se questo è possibile con le API pubbliche?C'è un modo per modificare la velocità delle animazioni per UICollectionViews?
risposta
Assolutamente! Ma non puoi farlo correttamente usando i blocchi di animazione UIView
. Devi scavare in Core Animation.
La vista raccolta aggiunge utili animazioni allo CALayer
che supporta ogni UICollectionViewCell
. Ma se si implementa il proprio layout (o una sottoclasse esistente) è possibile apportare tutte le modifiche necessarie a queste animazioni nel metodo finalizeCollectionViewUpdates
.
Dalla documentazione UICollectionViewLayout
classe:
I collezione guarda chiamate questo metodo come l'ultimo passo prima che precede di animare qualsiasi modifica in posizione.
Ecco un esempio di come sostituire l'animazione posizione di default con il proprio:
- (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"];
}
}
}
Guarda i metodi di animazione legati su CALayer
per vedere come si può scavare in quello che le animazioni sono attualmente in esecuzione sul tuo livello.
Utilizzando questo approccio si può anche essere creativi e aggiungere effetti di overshoot/bounce usando CAKeyframeAnimation
o qualsiasi altra cosa si possa pensare. Puoi anche fare cose come disabilitare selettivamente alcune animazioni (come le dimensioni) e mantenere gli altri (come la posizione).
Copia questo più da qui: https://stackoverflow.com/a/18392148/1751266
È possibile modificare qualsiasi velocità di animazione con CALayer. Così per UICollectionView questo appare come il seguente:
[self.collectionView.viewForBaselineLayout.layer setSpeed:0.1f];
E si può cambiare di nuovo la velocità originale:
[self.collectionView.viewForBaselineLayout.layer setSpeed:1.0f];
Per questo lavoro potrebbe essere necessario importare QuartzCore:
#import <QuartzCore/QuartzCore.h>
Ricorda che influisce su tutte le altre animazioni sullo stesso livello, incluse le UIImageViews animate e tali che potrebbero aver bisogno di essere compensate.
- 1. controllare la velocità delle animazioni insertRowsAtIndexPath UITableView
- 2. Un modo per aumentare la velocità di avvio JVM?
- 3. Animazioni di rilevamento delle funzioni per Android
- 4. Come modificare la velocità durante l'animazione CABasicAnimation
- 5. Esiste un modo per eseguire due animazioni jQuery (correttamente) contemporaneamente?
- 6. Migliorare la velocità di elaborazione delle immagini
- 7. C'è un modo per interrompere un ciclo foreach in velocità?
- 8. Considerate preallocare per la velocità
- 9. Qualche modo per modificare la durata di zoomToRect per UIScrollView?
- 10. Swift: imposta la velocità per la distanza
- 11. Drag & Drop tra due UICollectionViews
- 12. Migliorare la velocità delle manipolazioni di stringhe
- 13. Configurare Bullet Physics per la velocità
- 14. MVVM, Animazioni e comandi - Il modo migliore per dare il via alle animazioni?
- 15. Velocità delle liste C#
- 16. Diagramma grafico flottaggio per modificare la posizione delle legende
- 17. C'è un modo per disattivare le animazioni in github mentre visualizzi la navigazione nel codice?
- 18. Miglior crawler grafico web per la velocità?
- 19. uso ottimale dei BitmapFactory.Options.inSampleSize per la velocità
- 20. Come aumentare la velocità per caricare un'attività?
- 21. Modo sicuro per modificare la priorità di una NSOperazione
- 22. Wordpress: esiste un modo per regolare la larghezza delle colonne per la tabella dei post?
- 23. Come posso modificare la velocità della dissolvenza per i messaggi di avviso in Bootstrap di Twitter?
- 24. Come posso modificare il mio codice per migliorare la mia velocità di elaborazione
- 25. Algoritmo di datazione delle velocità
- 26. PHP/JavaScript per modificare dinamicamente i percorsi delle immagini
- 27. urllib.request: un modo per leggerlo senza modificare l'oggetto richiesta?
- 28. Esiste un modo efficace per modificare dinamicamente compress_matrix in boost?
- 29. dove scaricare fantastiche animazioni per i test?
- 30. C'è un modo per modificare l'ordine di disegno in WPF