2010-09-06 18 views
5

Ich möchte eine pulsierende Animation auf einem einfachen UIImageView erstellen. Der ImageView wird ein wenig größer und dann wieder auf seine ursprüngliche Größe.Pulsing Animation

habe ich den folgenden Code:

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

Dies funktioniert auf iOS3 in Ordnung, aber nur teilweise auf iOS4 funktioniert.

Ich habe einen UITabBarController mit 2 Ansichten drin. In der ersten ist die imageView mit der Animation und die Animation startet, sobald die Ansicht geladen ist. Aber nachdem ich zur zweiten Ansicht (mit TabBar) und zurück gewechselt habe, läuft die Animation nicht mehr auf iOS4. (Aber auf iOS3 kann ich zwischen diesen 2 Ansichten wechseln und die Animation funktioniert immer noch gut.)

Ich habe auch versucht mit einem Timer, der jede Sekunde doCoolAnimation aufruft, aber das hilft nicht, die Animation erneut zu starten.

Kann jemand erklären, warum nach dem Wechsel der Animation die Animation verschwunden ist? Gibt es einen Workaround, der es unter iOS4 funktionieren lässt?

Antwort

9

Mit dieser einfachen Methode: -

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 ist wirklich cool! Gibt es auch noch zu prüfen, ob schon Animation läuft? – Mithuzz

1

ViewDidLoad wird nur zum ersten Mal aufgerufen, wenn die Ansicht geladen wird. Da die Sicht nicht sofort aufgehoben wird, wenn Sie Ansichten wechseln, wie sie noch existiert, wird viewdidLoad nicht erneut aufgerufen, wenn Sie in die Ansicht zurückkehren.

Versuchen Sie, [self doCoolAnimation] aufzurufen; in SichtDidAppear. Dies wird jedes Mal aufgerufen.

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