2009-03-06 10 views
11

Sto provando a ridimensionare un'immagine, cambiare l'immagine, quindi ridimensionarla.Come si concatenano le animazioni in scala con un UIImageView per iPhone?

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

fa lo strizzacervelli, poi quando completa, posso cambiare l'immagine, e inizio a fare crescere:

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

Questa grande opera sul simulatore, ma sul dispositivo, quando la strizzacervelli completa, Ricevo un bagliore dell'immagine a grandezza originale, quindi l'animazione della crescita inizia con la nuova immagine.

Qualche idea su come sbarazzarsi di quel flash?

(ho provato "removedOnCompletion = no;" e tentato l'impostazione del affineTransform uguale alla dimensione ridotta dopo il primo termine, ma non ha avuto molta fortuna.)

Eventuali suggerimenti apprezzato.

kb

Edit:

Eccellente! Impostazione di quanto segue:

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

Rimosso il lampeggiamento. Grazie, Ben!

risposta

13

Prova a impostare l'animazione fillMode a kCAFillModeForwards. Questo dovrebbe lasciare l'oggetto com'era alla fine dell'animazione, piuttosto che prima.

+0

Eccellente! Impostazione di quanto segue: \t out.fillMode = kCAFillModeForwards; \t out.removedOnCompletion = NO; Rimosso il lampeggiamento. Grazie, Ben! – KevinButler

0

Ho avuto lo stesso problema quando ho provato a creare un'altra CAAnimation nel metodo animationDidStop. Suggerisco di usare CAKeyframeAnimation.