estoy aplicando CABasicAnimation para la propiedad de posición de una capa, está animando bien pero después de la animación completa su regreso a la posición original cómo evitar eso y hacer que la imagen permanezca en una posición animada solamente ?CABasicAnimation no cambia su posición propiedad después de que la animación completa
Respuesta
Hay algunas formas diferentes de resolver esto. Mi favorito es establecer el objeto al final de la animación y usar fromValue en lugar de toValue para crear la animación. También puede establecer tanto desde Valor como a Valor para crear este efecto. es decir
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 1.0;
animation.fromValue = [NSValue valueWithCGPoint:startPoint];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
viewToAnimate.center = endPoint;
[viewToAnimate.layer addAnimation:animation forKey:@"slide"];
La otra manera de hacer esto es establecer a sí mismo como el delegado y poner en práctica:
Es necesario ajustar la posición final. Si solo usa la animación deValor y aValor, volverá al punto de inicio original. La animación usa una copia de la vista/capa mientras se "reproduce" y luego la animación mostrará la vista/capa original cuando termine.
Si no lo establece explícitamente, parecerá que retrocede, aunque la vista/capa nunca se movió realmente.
startPoint y endPoint son CGPoints y myView es la UIView que se está animando.
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = .3;
animation.fromValue = [NSValue valueWithCGPoint:startPoint];
animation.toValue = [NSValue valueWithCGPoint:endPoint];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[myView.layer addAnimation:animation forKey:@"position"];
myView.layer.position = endPoint; // Must set end position, otherwise it jumps back
Además, no olvides establecer la propiedad ** removedOnCompletion ** de la animación en ** NO ** 'animation.removedOnCompletion = NO;' – krpec
Si nos fijamos en la documentación para addAnimation: forKey :, que dice 'Normalmente, esto se invoca de forma implícita'. En otras palabras, se supone que no debes llamarlo directamente. En realidad estás destinado a hacer lo siguiente en su lugar, lo que es aún más fácil de establecer desde y hacia los valores, sólo tiene que establecer los valores directamente sobre la capa:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
animation.duration = .3;
myLayer.actions = @{@"opacity": animation};
myLayer.opacity = 0;
Esto se desvanecerá una capa a cero opacidad.
No veo eso en los documentos, podría ser algo de OSX ¿solamente? Estoy mirando CALayer [aquí] (https://developer.apple.com/library/ios/documentation/graphicsimaging/reference/CALayer_class/Introduction/Introduction.html#//apple_ref/occ/instm/CALayer/addAnimation: forKey :). La mayoría de los tutoriales de Apple incluyen una llamada a 'addAnimation: forKey:' p. [aquí] (https://developer.apple.com/library/ios/documentation/cocoa/conceptual/coreanimation_guide/CreatingBasicAnimations/CreatingBasicAnimations.html). – bcattle
Para fijar el objeto al final de la animación acaba de escribir el código como este
#import <QuartzCore/QuartzCore.h>
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 1.0;
animation.fromValue = [NSValue valueWithCGPoint:startPoint];
animation.timingFunction = [CAMediaTimingFunction functionWithName:easing];
animation.fillMode = kCAFillModeForwards; // This line will stop the animation at the end position of animation
animation.autoreverses = NO;
viewToAnimate.center = endPoint;
[viewToAnimate.layer addAnimation:animation forKey:@"slide"];
no funciona para mí –
Puede acaba de establecer removedOnCompletion a NO si desea conservar el valor final. Y no te olvides de configurar el modo de relleno.
animation.fillMode = kCAFillModeForwards; //The receiver remains visible in its final state when the animation is completed.
animation.removedOnCompletion = NO;
- 1. Después de rotar un CALayer usando CABasicAnimation la capa salta a su posición no girada
- 2. CABasicAnimation no anima mi propiedad
- 3. Después de la animación, la posición de vista se restablece
- 4. CALayer no está dibujando su contenido mientras se usa CABasicAnimation
- 5. La propiedad de animación CSS permanece después de la animación
- 6. DataTrigger no volver a evaluar después de la propiedad cambia
- 7. Animación de la propiedad shadowPath de CALayer
- 8. C# UserControl Propiedad visible que no cambia
- 9. Android: ¿Girar la animación vuelve a su estado real después de terminar la animación?
- 10. Cómo cambiar la velocidad durante la animación CABasicAnimation
- 11. Animación de la propiedad foregroundColor de CATextLayer
- 12. parada CABasicAnimation de ser retirado después de la finalización
- 13. Ver la animación no cambia el área táctil
- 14. Ejecutar el código después de que finalice la animación
- 15. CABasicAnimation repeat ilimitado sin HUGE_VALF?
- 16. QML animaciones propiedad visible cambia
- 17. Notificación completa de animación después de que UITableView se reordena manualmente
- 18. Cambiar la posición de la vista después del final de la animación
- 19. ¿Hay alguna manera de pausar una CABasicAnimation?
- 20. NSLayoutConstraint.constant que ignora la animación
- 21. El área de clic sensible no cambia después de la animación y la vista interactiva en Android
- 22. ProgressBar no se actualiza correctamente después de la animación
- 23. La animación Boolean bloquea la propiedad
- 24. Posición de animación de CSS3
- 25. Animación CSS3, traducir a la posición
- 26. La GUI de Qt no cambia después de la compilación
- 27. mostrar todas las imágenes sólo después de su carga completa
- 28. Devolución de llamada UITableView después de la animación de eliminación de fila completa
- 29. UIView Animación anima la posición pero no el ancho
- 30. WPF DatePicker IsEnabled propiedad no cambia apariencia
Genial. funciona para mí, muchas gracias –
aquí, ¿cuál es el valor de "easing" ?. – sathiamoorthy
Creo que si no se establece la aceleración, se carga previamente en Linear, pero debería ser sencillo agregarla si está buscando facilidad de entrada/salida o entrada/salida. –