Estoy animando un péndulo que oscila de 0 grados a un máximo de 200 grados y luego de vuelta. El problema es que si el péndulo supera los 180 grados, vuelve a 0 por la ruta más corta que debe continuar en el sentido de las agujas del reloj. Y me gustaría que vaya en sentido antihorario. Aquí está mi código: ('derecho' es un valor lógico que es TRUE cuando el péndulo se balancea de izquierda a derecha)Forzar rotación en sentido horario/antihorario para un CABasicAnimación de un UIImageView
- (void)swingPendulum {
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
if (right)
rotationAnimation.toValue = [NSNumber numberWithFloat:degreesToRadians(kMax)];
else
rotationAnimation.toValue = [NSNumber numberWithFloat:degreesToRadians(kMin)];
rotationAnimation.duration = 1.0;
rotationAnimation.repeatCount = 1.0;
rotationAnimation.delegate = self;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
rotationAnimation.removedOnCompletion = NO;
[pendulum.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}
Alguna idea de cómo puedo hacer este trabajo? Es la pieza final de mi rompecabezas de mi cuentakilómetros que de otra manera funciona muy bien: D ¡Gracias!
Michael
Gracias por la respuesta, pero no parece marcar la diferencia, me temo. Establecerlo en un valor -ive solo parece hacer que la animación encaje al final ...Creo que tal vez debería volver a escribirlo para usar un NSTimer y animar la cosa fotograma a fotograma ... – Smikey
En realidad, tienes razón, ya que kMin está actualmente configurado en -20, lo que hace que el péndulo oscile de hecho en sentido antihorario, pero solo si no pasa de 180 grados. Si va más allá de 180, entonces no importa en qué valor lo configure (-180, -90, 90, etc.), siempre continúa en sentido horario, incluso si no es la ruta más corta ... ¿Alguna otra idea? – Smikey
AAAAH, si configuro un valor como -380, sin embargo, funciona. No estoy muy seguro de por qué, pero acabo de agregar una condición que cambia el valor aValue según si el swing inicial pasa 180 grados o no. ¡Gracias por toda la ayuda! – Smikey