TL; DR: utilizar CALayer -actionForKey :, no -animationForKey:
@Dimitri respuesta Bouniol 's no funcionó para mí cuando se llama desde un una setter afectado dentro de un bloque de animación. La razón, desde mi entendimiento, es que el sistema de animación de UIView configura el estado antes de comenzar la animación real (y los iniciadores de llamadas antes de comenzar la animación real). Lo que funcionó para mí fue llamar al método similar -actionForKey: en la capa. La acción devuelta tenía la duración adecuada establecida, y puede usarse tal como está en su respuesta.
CAAnimation *animation = (CAAnimation*)
[self.layer [email protected]"position"]; // or property of interest
[CATransaction begin];
[CATransaction setAnimationDuration:animation.duration];
[CATransaction setAnimationTimingFunction:animation.timingFunction];
// CALayer animation here
[CATransaction commit];
No estoy seguro de entender lo que quiere decir, ¿la duración de la animación no sería 1.0? –
sí, pero estoy usando un componente dentro del bloque que necesita saber la duración, y no quiero pasar la duración como variable – adamsiton
Buena pregunta +1 lo siento, no pude evitarlo. –