2009-03-06 9 views
11

Ich versuche ein Bild zu verkleinern, das Bild zu ändern und es dann wieder zu skalieren.Wie kette ich Skalenanimationen mit einem iPhone UIImageView?

CABasicAnimation* shrink = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
shrink.toValue = [NSNumber numberWithDouble:0]; 
shrink.duration = 1; 
    shrink.delegate = self; 
    [myImageView.layer addAnimation:shrink forKey:@"shrink"]; 

macht den Schrumpf, dann, wenn es abgeschlossen ist, ich das Bild zu ändern, und starten Sie die wachsen:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag 
{ 
    myImageView.image = [images objectAtIndex:image]; 
CABasicAnimation* grow = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
grow.toValue = CGAffineTransformMakeScale(1,1); 
    grow.delegate = self; 
grow.duration = 1; 
[myImageView.layer addAnimation:grow forKey:@"grow"]; 
} 

Dies funktioniert gut auf dem Simulator, aber auf dem Gerät, wenn der Schrumpf abgeschlossen ist, Ich bekomme ein Flash des alten Bildes in voller Größe, dann beginnt die Grow-Animation mit dem neuen Bild.

Irgendeine Idee, wie man diesen Blitz los wird?

(Ich habe versucht, „removedOnCompletion = NO“, und versuchte, nach dem ersten Abschluss gleich der verkleinerten Größe der Affine Einstellung, haben aber nicht viel Glück.)

Alle geschätzt Tipps.

kb

Edit:

Excellent! Einstellung der folgenden Werte:

shrink.fillMode = kCAFillModeForwards; 
shrink.removedOnCompletion = NO; 

Das Blinken wurde entfernt. Danke, Ben!

Antwort

13

Versuchen Sie, die fillMode Ihrer Animation auf kCAFillModeForwards zu setzen. Das sollte den Artikel so belassen, wie er am Ende der Animation war, anstatt vorher.

+0

Ausgezeichnet! Einstellung der folgenden Werte: \t out.fillMode = kCAFillModeForwards; \t out.removedOnCompletion = NO; Das Blinken wurde entfernt. Danke, Ben! – KevinButler

0

Ich hatte das gleiche Problem, als ich versuchte, eine andere CAAnimation in der animationDidStop-Methode zu erstellen. Ich schlage vor, CAKeyframeAnimation zu verwenden.