2009-10-14 7 views
8

Ich Animieren einen Knopf jetzt Kern-Animation mit auf einen bestimmten Zustand ich die Animation stoppen wollen, wie verhindere ich die Animation?Wie stoppe Kernanimation?

hier ist die Methode, auf die Schaltfläche

-(void)animateButton:(UIButton *)btnName 
{ 
    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; 

    [btnName.layer addAnimation:pulseAnimation forKey:nil]; 
} 
Explicit Animationen

Sie starten eine explizite Animation durch einen addAnimation Senden

+1

auf einem ersten Scan, dachte ich, diese Frage war leider :-) –

+0

„wie Einäscherung zu stoppen!“ Vergiss den Raum –

Antwort

22

Von Core Animation Programming Guide

Starten und Anhalten zu animieren: forKey: Nachricht an das Ziel Ebene, übergibt die Animation und eine Kennung als Parameter. Nach dem Hinzufügen zur Zielebene wird die explizite Animation ausgeführt, bis die Animation abgeschlossen ist oder aus der Ebene entfernt wird. Die Kennung, die zum Hinzufügen einer Animation zu einem Layer verwendet wird, wird auch verwendet, um sie durch Aufruf von removeAnimationForKey: zu stoppen. Sie können alle Animationen für einen Layer stoppen, indem Sie dem Layer eine Nachricht removeAllAnimations senden.

7

Wie schon erwähnt, müssen Sie Ihrer Animation nur einen Schlüssel zuweisen (String usw.). Verwenden Sie dann -removeAnimationForKey: auf Ihrer Ebene, um diese bestimmte Animation zu entfernen.

jedoch wenn Sie dies tun, sollte die Schicht auf seiner Pre-Animation Zustand zurück. Um die Schicht Anschlag haben mit der animierten Eigenschaft seinen aktuellen Wert zu halten, werden Sie wollen das tun, was ich in this answer beschreiben: die presentationLayer für die belebende Schicht erhalten, lesen Sie den aktuellen Wert der animierten Eigenschaft, setzen Sie diesen Wert auf die belebende Schicht und dann nur die Animation entfernen.