2009-03-06 16 views
11

Estoy tratando de escalar una imagen, cambiarla y luego escalarla nuevamente.¿Cómo encadenar las animaciones de escala con un 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"]; 

hace que la contracción, a continuación, cuando se completa, cambio la imagen, e iniciar el cultivo:

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

Esto funciona muy bien en el simulador, pero en el dispositivo, cuando la contracción completa, Obtengo un flash de la imagen antigua de tamaño completo, luego la animación de crecimiento comienza con la nueva imagen.

¿Alguna idea de cómo deshacerse de ese flash?

(que he probado "removedOnCompletion = NO;" y el intento de establecer la AffineTransform igual al tamaño reducido después de la primera realización, pero no tuvo mucha suerte.)

Algún consejo apreciado.

kb

Editar:

Excelente! Estableciendo lo siguiente:

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

Se ha eliminado el parpadeo. Gracias, Ben!

Respuesta

13

Intenta configurar la animación de fillMode en kCAFillModeForwards. Eso debería dejar el elemento como estaba al final de la animación, en lugar de antes.

+0

¡Excelente! Configuración de lo siguiente: \t out.fillMode = kCAFillModeForwards; \t out.removedOnCompletion = NO; Se ha eliminado el parpadeo. Gracias, Ben! – KevinButler

0

He tenido el mismo problema cuando traté de crear otra CAAnimation en el método animationDidStop. Sugiero usar CAKeyframeAnimation.

Cuestiones relacionadas