2009-09-14 11 views

Respuesta

2

Si se refiere a: "? ¿Cómo se hace una imagen sigue una trayectoria circular", entonces el pseudocódigo sería:

image.x = circleCentre.x + cos(angle) * circleRadius; 
image.y = circleCentre.y + sin(angle) * circleRadius; 
angle += 5; 
1

This question pregunta lo mismo, aunque en otras palabras. Las respuestas en esa pregunta, así como en this question, deberían proporcionar una forma de animar un UIView (UIImageView es simplemente una subclase de esto) sobre su centro para 360 grados o más.

+0

Probablemente esté confundido acerca de la rotación y la revolución. La pregunta anterior es acerca de la revolución. – Biranchi

28

Puede girar una vista, por cierto número de radianes, independientemente de si es menos de una rotación completa o muchos múltiplos de una rotación completa, sin tener que dividir la rotación en partes. Como ejemplo, el siguiente código girará una vista, una vez por segundo, durante un número específico de segundos. Puede modificarlo fácilmente para hacer girar una vista por un cierto número de rotaciones, o por una cierta cantidad de radianes.

- (void) runSpinAnimationWithDuration:(CGFloat) duration; 
{ 
    CABasicAnimation* rotationAnimation; 
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ]; 
    rotationAnimation.duration = duration; 
    rotationAnimation.cumulative = YES; 
    rotationAnimation.repeatCount = 1.0; 
    rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 

    [myView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 
} 
+0

me sale un error, "rotations undeclared" – abhinav

+3

rotations es una const. Reemplácelo con la cantidad de veces que desee que la vista gire en la cantidad de tiempo de duración. – mahboudz

3

basado en la respuesta de mahboudz, se puede establecer que gire infinitamente mediante el establecimiento de:
rotationAnimation.repeatCount = HUGE_VALF;

1

Creación de la animación

- (CABasicAnimation *)spinAnimationWithDuration:(CGFloat)duration clockwise:(BOOL)clockwise repeat:(BOOL)repeats 
{ 
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    anim.toValue = clockwise ? @(M_PI * 2.0) : @(M_PI * -2.0); 
    anim.duration = duration; 
    anim.cumulative = YES; 
    anim.repeatCount = repeats ? CGFLOAT_MAX : 0; 
    return anim; 
} 

Agregar a una vista

CABasicAnimation *animation = [self spinAnimationWithDuration:1.0 clockwise:YES repeat:YES]; 
[self.spinningView.layer addAnimation:animation forKey:@"rotationAnimation"]; 

¿Cómo es esta respuesta diferente? de la respuesta de @ mahboudz? Tendrás un código mucho más limpio si la mayoría de tus funciones devuelve objetos en lugar de solo manipular algunos objetos aquí y allá.

Cuestiones relacionadas