2010-09-06 29 views
5

Quiero construir una animación pulsante en un UIImageView simple. ImageView crecerá un poco más y luego volverá a su tamaño original.Pulsing Animation

He utilizado el siguiente código:

- (void) doCoolAnimation { 
    [UIView beginAnimations:@"glowingAnimation" context:nil]; 
    [UIView setAnimationRepeatAutoreverses:YES]; 
    [UIView setAnimationRepeatCount:INT_MAX]; 
    [UIView setAnimationDuration:0.25]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    imageView.transform = CGAffineTransformMakeScale(1.15, 1.15); 
    [UIView commitAnimations]; 
} 

Esto funciona bien en iOS3 pero funciona sólo parcialmente en iOS4.

Tengo un UITabBarController con 2 puntos de vista en el mismo. En el primero está el imageView con la animación, y la animación comienza tan pronto como se carga la vista. Pero después de cambiar a la segunda vista (usando TabBar) y viceversa, la animación ya no se ejecuta en iOS4. (Pero en iOS3 puedo cambiar entre estas 2 vistas y la animación sigue funcionando bien)

También probé con un temporizador que llama a DoCoolAnimation cada segundo, pero eso no ayuda a comenzar la animación nuevamente.

¿Alguien puede explicar por qué después de ver el cambio de la animación se ha ido? ¿Hay alguna solución que pueda hacer que funcione en iOS4?

Respuesta

9

Utilice este método simple: -

CABasicAnimation *pulseAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
pulseAnimation.duration = .5; 
pulseAnimation.toValue = [NSNumber numberWithFloat:1.1]; 
pulseAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
pulseAnimation.autoreverses = YES; 
pulseAnimation.repeatCount = FLT_MAX; 
[ButtonName.layer addAnimation:pulseAnimation forKey:nil]; 
+0

Es realmente genial! También hay de todos modos para comprobar si ya está en marcha alguna animación? – Mithuzz

1

ViewDidLoad solo se invoca la primera vez que se carga la vista. Como la vista no se desasigna inmediatamente cuando cambia de vista, ya que aún existe, viewdidLoad no se vuelve a llamar cuando vuelve a la vista.

Intenta llamar [self doCoolAnimation]; en viewDidAppear. Esto se llama todo el tiempo.

- (void)viewDidAppear:(BOOL)animated { 
    [self doCoolAnimation] 
}