rotar una UIView alrededor de su centro, pero varias veces

votos
16

Estoy tratando de rotar algunos UIViewalrededor de su centro, por lo que el código simple es algo así como (en pseudocódigo):

[UIView beginAnimations:@crazyRotate context:nil];
[UIView setAnimationDuration:1.0];
someview.transform = CGAffineTransformMakeRotation(angle);
[UIView commitAnimations]

ahora si configuro un ángulo para decir M_PI / 2, la cosa gira bien. si lo configuro en 2 * M_PI, bien, no hace nada. Puedo entender que la matriz se traduce en algo que no hace nada (rotar 360 significa permanecer en cierto sentido), sin embargo, quiero rotarlo 5 veces (piense en una escala de rotación de periódico que se acerca a usted efecto - No estoy genial para describir, espero que alguien entienda). Por lo tanto, traté de agregar el ángulo de configuración a 180 grados (M_PI) y agregar un anidado animatationBlock. pero supongo que ya que estoy configurando la misma propiedad ( someview.transition) nuevamente lo ignora de alguna manera). Intenté configurar el recuento repetido de la animación en 2 con el ángulo M_PI, pero parece que simplemente gira 180, volviendo a la posición recta y luego iniciando la rotación nuevamente.

Por lo tanto, estoy un poco fuera de las ideas, cualquier ayuda apreciada! --t

Publicado el 06/02/2009 a las 00:49
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
36

Puede usar la siguiente animación en la propiedad de capa de su UIView. Lo he probado

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Respondida el 06/02/2009 a las 01:26
fuente por usuario

votos
6

Como se ha indicado Brad Larson, se puede hacer esto con una CAKeyframeAnimation. Por ejemplo,

CAKeyframeAnimation *rotationAnimation;
rotationAnimation = 
   [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];

rotationAnimation.values = [NSArray arrayWithObjects:
                            [NSNumber numberWithFloat:0.0 * M_PI], 
                            [NSNumber numberWithFloat:0.75 * M_PI], 
                            [NSNumber numberWithFloat:1.5 * M_PI], 
                            [NSNumber numberWithFloat:2.0 * M_PI], nil]; 
rotationAnimation.calculationMode = kCAAnimationPaced;
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.fillMode = kCAFillModeForwards;
rotationAnimation.timingFunction = 
   [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
rotationAnimation.duration = 10.0;

CALayer *layer = [viewToSpin layer];
[layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];

Se puede controlar la duración de la animación total con el rotationAnimation.durationinmueble, y la aceleración y desaceleración (y cálculo de pasos en el medio) con la rotationAnimation.timingFunctionpropiedad.

Respondida el 29/02/2012 a las 00:37
fuente por usuario

votos
1
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
animation.duration = 8.0f;
animation.repeatCount = INFINITY;
[self.myView.layer addAnimation:animation forKey:@"SpinAnimation"];
Respondida el 22/06/2015 a las 15:35
fuente por usuario

votos
1

Obtener un efecto de giro continuo es un poco complicado, pero describo un medio para hacerlo aquí . Sí, Core Animation parece optimizar las transformaciones a la posición final más cercana dentro del círculo unitario. El método que describo allí encadena unas pocas animaciones de media rotación para hacer rotaciones completas, aunque se nota un ligero tartamudeo en el traspaso de una animación a la siguiente.

Quizás una CAKeyframeAnimation construida con estos valores de media rotación sería el camino correcto a seguir. Entonces también puedes controlar la aceleración y la desaceleración.

Respondida el 06/02/2009 a las 14:50
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more