2012-05-13 14 views
5

¿Cómo puedo cambiar myLayer.contents con un conjunto de imágenes (es decir, cambiar entre img1 e img2) durante la traducción? ¡Gracias!cambio de imagen durante la traducción

UIImage *myImage = [UIImage imageNamed:@"img1.png"]; 
CALayer *myLayer = [CALayer layer]; 
myLayer.contents = (id)myImage.CGImage; 
myLayer.Position = CGPointMake(0,0); 
myLayer.Bounds=CGRectMake(0.0, 0.0, 50, 50); 
[self.view.layer addSublayer:myLayer]; 

//translation1 
CGPoint startPt = CGPointMake(10,10); 
CGPoint endPt = CGPointMake(100,100);  
CABasicAnimation *transl1 = [CABasicAnimation animationWithKeyPath:@"position"]; 
transl1.removedOnCompletion = FALSE; 
transl1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
transl1.fromValue = [NSValue valueWithCGPoint:startPt]; 
transl1.toValue = [NSValue valueWithCGPoint:endPt]; 
transl1.duration = 3; 
transl1.fillMode = kCAFillModeForwards; 
transl1.beginTime = 0; 
[myLayer addAnimation: transl1 forKey: nil]; 
+1

en realidad, creo que se refería a la traducción, en matemáticas la traducción es mover un objeto a una coordenada diferente – MCKapur

Respuesta

2

El hombre que camina ejemplo:

He tratado con exactamente la misma tarea, pero tenía que hacer una araña corriendo que es 6 pierna pie y tiene 12 cuadros. Realmente fue muy difícil de hacer y me tomó unos meses perfeccionar. La cuestión es que el ejemplo del hombre que se está despertando normalmente se hace configurando una matriz de marcos de imagen (Pierna inicial, Última pata) en una propiedad de Imágenes de animación de UIImageView. Luego activa y desactiva la animación junto con el carácter en movimiento hacia la derecha y hacia la izquierda y creando así la ilusión de caminar. Ahora el gran problema surge cuando quieres crear una ilusión de aceleración. No hay forma de cambiar la duración de la animación DURANTE la reproducción de la animación y este es un revés importante que es muy difícil de superar.

Aquí está el código que produje para superar este problema:

Aquí se define una matriz con los marcos de las piernas para caminar, marco por paso.

animationImagesSpider = [NSArray arrayWithObjects: 
[UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], nil]; 

Aquí se adjunta la matriz al UIImageView:

imgViewSpider = [[UIImageView alloc] initWithFrame:CGRectMake(200,410,100,145)]; 
imgViewSpider.animationImages = animationImagesSpider; 

Ahora bien, si sólo tiene que llamar [imgViewSpider startAnimating]; esto iniciará la animación a una velocidad constante hasta que la detengas. Para superar esto he utilizado una recursividad que reproduce una animación corta para cada paso y esto permite que ajusta la duración entre cada uno de los pasos:

- (void) spiderRun { 

    imgViewSpider.animationDuration= 0.51-(accSp/3.5); 
    [imgViewSpider setAnimationRepeatCount:222]; /// this is a dummy value that has no effect because animtion ends after the first frame 
    [imgViewSpider startAnimating]; 
    [self performSelector:@selector(spiderRun) withObject:nil afterDelay: 0.5-(accSp/3.5)]; 

} 

Al cambiar constantemente el valor ACCSP, puedo controlar la velocidad de paseo durante la caminata .

+0

gracias, voy a intentar! ciao, Giuseppe – Beppino66

0

Tendrá que crear una segunda animación transl2, esta animación hará que la imagen se intercambie. Tendrá que establecer la duración a la mitad de la duración de transl1 para que quede en el medio de la animación de transl1.

transl1.duration = 3

transl2.duration = 1,5

+0

gracias, está bien. También me gustaría volver a img1 y luego a img2 ... para simular un movimiento ... ¿en qué parte del código puedo decir esto? ciao – Beppino66

+0

No está claro cómo mediante el cambio de imágenes se estimula un movimiento. –

+0

Disculpe mi confusión ...ahora sé cómo mover una capa a la pantalla, con traducciones, rotaciones, etc. El problema es que el contenido del ayer es la misma imagen, y me gustaría cambiarlo durante la animación (por ejemplo, un hombre caminando).), así que necesito hacer un ciclo entre un conjunto de imágenes: img1, img2, img1, img2 .... durante la traducción ... – Beppino66

1

Como dijo el otro cartel, crear una segunda animación que anima la propiedad contenidos de la capa a una nueva imagen.

Sugiero poner ambas animaciones en un grupo de animación y agregar el grupo de animación a la capa. Luego puede controlar fácilmente tanto la duración como la hora de inicio de ambas animaciones. Puede hacer que el intercambio de imagen se lleve a cabo durante parte de la duración total, programada para realizarse en el medio de la animación.

Debe establecer el inicio de la animación con la propiedad beginTime y la duración con la propiedad de duración.

+0

muchas gracias Duncan! ciao – Beppino66

Cuestiones relacionadas