Estoy hablando de cosas como insertItemsAtIndexPaths
o moveItemAtIndexPath:toIndexPath:
. He tratado de envolverlo en un bloque de animación, pero eso no funcionó. Parece que las animaciones están estancadas a .25 o .3 segundos, pero me gustaría desacelerar esto. Además de implementar el movimiento yo mismo, que no vale la pena, ¿alguien sabe si esto es posible con las API públicas?¿Hay alguna forma de cambiar la velocidad de las animaciones para UICollectionViews?
Respuesta
¡Absolutamente! Pero no puede hacerlo correctamente usando los bloques de animación UIView
. Necesitas profundizar en Core Animation.
La vista de colección agrega útilmente animaciones al CALayer
que está respaldando cada UICollectionViewCell
. Pero si implementa su propio diseño (o subclase de un existente) puede hacer todas las modificaciones necesarias en estas animaciones en el método finalizeCollectionViewUpdates
.
De la documentación UICollectionViewLayout
clase:
Los linterna Vista llama a este método como el último paso antes de proceder a animar cualquier cambio en su sitio.
Aquí es un ejemplo de cómo sustituir la animación posición por defecto con su propio:
- (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"];
}
}
}
vistazo a los métodos relacionados con la animación que aparecen en la CALayer
para ver cómo se puede excavar en lo animaciones están ejecutando actualmente en tu capa.
Utilizando este enfoque, puede incluso ser creativo y agregar efectos de rebasamiento/rebote usando CAKeyframeAnimation
o cualquier otra cosa que se le ocurra. También podría hacer cosas como deshabilitar selectivamente algunas animaciones (como el tamaño) y mantener otras (como la posición).
copia de este pasar de aquí: https://stackoverflow.com/a/18392148/1751266
Usted puede cambiar cualquier velocidad de la animación con CALayer. Así que para UICollectionView esto se parece a lo siguiente:
[self.collectionView.viewForBaselineLayout.layer setSpeed:0.1f];
Y se puede cambiar de nuevo la velocidad original:
[self.collectionView.viewForBaselineLayout.layer setSpeed:1.0f];
Para que esto funcione es posible que tenga que importar QuartzCore:
#import <QuartzCore/QuartzCore.h>
Solo tenga en cuenta que afecta a otras animaciones en la misma capa, incluidas UIImageViews animadas y similares, por lo que pueden necesitar una compensación.
- 1. Estimar la velocidad del motor del navegador JS para deshabilitar las animaciones de forma condicional
- 2. Usando Core Animation, ¿hay alguna forma de agrupar animaciones para varios CALayers?
- 3. Reduzca la velocidad y acelere las animaciones con CoreAnimation
- 4. ¿Alguna forma de aumentar la velocidad de inicio de JVM?
- 5. ¿Alguna forma de cambiar la duración de zoomToRect para UIScrollView?
- 6. ¿Hay alguna herramienta gratuita para crear animaciones SWF/Flash?
- 7. ¿Hay alguna forma de desactivar las animaciones en github mientras visualizas la navegación a través del código?
- 8. ¿Hay alguna forma de automatizar las pruebas de Windows Forms?
- 9. ¿Hay alguna forma de filtrar las palabras ofensivas de Jcaptcha?
- 10. ¿Hay alguna forma de 'resaltar' el código?
- 11. ¿Hay alguna forma de enumerar las señales de Django?
- 12. ¿Hay alguna forma de capturar la pantalla como video en tiempo real?
- 13. ¿Hay alguna manera de romper un ciclo foreach en velocidad?
- 14. ¿Hay alguna forma de obtener la herramienta javadoc para documentar las anotaciones?
- 15. ¿Hay alguna forma de serializar el objeto linq para Memcached?
- 16. ¿hay alguna forma de ejecutar 2 objetos NSAnimation simultáneamente?
- 17. ¿Hay alguna forma de cambiar el espacio entre los elementos de la leyenda en ggplot2?
- 18. ¿Hay alguna forma de cambiar el nombre del nombre de la cookie RequestVerificationToken?
- 19. ¿Hay alguna forma de cambiar la contraseña de gmail mediante programación mediante Java?
- 20. ¿Hay alguna manera de cambiar las opciones de compilación de gcc para una gema?
- 21. ¿Hay alguna forma de pasar el iPhone?
- 22. ¿Hay alguna forma de generar código repetitivo para pilas RESTful?
- 23. Velocidad de fotogramas de la animación de jQuery
- 24. ¿Hay alguna forma de cancelar TabControl.Items.CurrentChanging?
- 25. ¿Hay alguna forma de multirreproducir un SqlDataReader?
- 26. ¿Hay alguna forma de sobrecargar + = en python?
- 27. ¿Hay alguna forma de personalizar la salida de git blame?
- 28. ¿Hay alguna forma de determinar la cantidad ideal de hilos?
- 29. ¿Hay alguna forma de ejecutar las pruebas unitarias de forma secuencial con MSTests?
- 30. ¿Hay alguna forma de sincronizar archivos gif?