2010-09-06 4 views
5

Je souhaite créer une animation pulsée sur un simple UIImageView. ImageView va grossir un peu, puis revenir à sa taille d'origine.Animation pulsée

J'ai utilisé le code suivant:

- (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]; 
} 

Cela fonctionne très bien sur iOS3 mais ne fonctionne que partiellement sur iOS4.

J'ai un UITabBarController avec 2 vues dedans. Dans le premier est l'imageView avec l'animation, et l'animation commence dès que la vue est chargée. Mais après avoir basculé vers la deuxième vue (avec TabBar) et retour, l'animation ne fonctionne plus sur iOS4. (Mais sur iOS3, je peux basculer entre ces 2 vues et l'animation fonctionne toujours très bien.)

J'ai également essayé avec une minuterie qui appelle doCoolAnimation toutes les secondes, mais cela ne permet pas de redémarrer l'animation. Est-ce que quelqu'un peut expliquer pourquoi, après la commutation de l'animation, l'animation a disparu? Y at-il une solution de contournement qui peut le faire fonctionner sur iOS4? ViewDidLoad n'est appelé que lors du premier chargement de la vue.

Répondre

9

Utilisez cette méthode 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

Il est vraiment cool! Aussi, est-il possible de vérifier si une animation est déjà en cours? – Mithuzz

1

Étant donné que la vue n'est pas désaffectée immédiatement lorsque vous changez de vue, car elle existe toujours, viewdidLoad n'est pas appelée à nouveau lorsque vous revenez dans la vue.

Essayez d'appeler [self doCoolAnimation]; dans viewDidAppear. C'est appelé à chaque fois.

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