2011-12-30 16 views
13

Quiero animar una vista que tiene forma de flecha, y quiero animar de izquierda a derecha, de izquierda a derecha y así sucesivamente ..Animación de bloques UIView mover vista de izquierda a derecha y volver a la izquierda

Este código a continuación no funciona, supongo que necesito una ruta, pero no sé cómo hacerlo en una animación de bloque UIView.

[UIView animateWithDuration:.5 delay:0 options:UIViewAnimationOptionRepeat animations:^{ 
    controller.view.frame = frame1; 
    controller.view.frame = frame2; 

} completion:^(BOOL finished) { 

}]; 

Respuesta

33

Puede utilizar UIViewAnimationOptionAutoreverse opción, probar el código de abajo:

UIView * testView = [[UIView alloc] initWithFrame:CGRectMake(20.0f, 100.0f, 300.0f, 200.0f)]; 
[testView setBackgroundColor:[UIColor blueColor]]; 
[self.view addSubview:testView]; 

[UIView animateWithDuration:0.3f 
         delay:0.0f 
        options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse 
       animations:^{ 
        [testView setFrame:CGRectMake(0.0f, 100.0f, 300.0f, 200.0f)]; 
       } 
       completion:nil]; 

[testView release]; 

Se repetirá movimiento de derecha a izquierda, de izquierda a derecha, ... sin problemas.

+0

su animación funciona bien cuando 'TestView' se agrega en' ViewController' ... pero no cuando se agrega en una 'Ver '..si es posible, por favor ayuda ... http: //stackoverflow.com/questions/16148239/animating-subviews-left-right-left – Subbu

+0

Hola @CodeJack, funciona incluso en otra Vista, lo que tienes que modificar es solo para reemplazar '[self.view addSubview: testView];' a '[self addSubview: testView];'. Eso es todo. Lo he probado y funciona perfecto. ;) – Kjuly

+0

@Kjuly Mi UIView tiene tres UIButton. Este botón no se elimina mientras la vista animada. Todavía está allí. Cómo mover toda la subvista mientras UIView anima – Thangavel

0

Suponiendo que frame1 es la posición de inicio y frame2 es la posición final antes de repetir.

El problema es que la animación se calcula al final del runloop, por lo tanto, se ignora frame1 y la vista simplemente se mueve a frame2. Si mueve la configuración de frame1 fuera del bloque, debería funcionar bien. Si desea que la animación se reproduzca hacia atrás y hacia adelante, deberá hacerla autoreverse con UIViewAnimationOptionAutoreverse

Cuestiones relacionadas