2011-04-28 15 views
9

Me preguntaba cómo puedo configurar una animación para que se repita. El número de repeticiones debe ser determinado por una variable. En el siguiente código, la variable int newPage debe determinar con qué frecuencia se repite la animación.Repite una animación una cantidad variable de veces

yo probamos este, pero la animación (que emplea una animación de bloque), sólo se ejecuta una vez:

for (int temp = 1; temp <= newPage; temp++) { 
      [self animatePage]; 
} 

Si codificar el siguiente, que funciona como yo quiero que, pero esto está codificada (es decir, la animación se repetirá dos veces) y no puedo ver una manera de cómo cambiar el número de la frecuencia con esta animación se ejecuta en el código y de acuerdo a mi variable de newPage:

[UIView animateWithDuration:0 
         delay:0.1 
      options:UIViewAnimationOptionCurveEaseIn 
      animations:^{[self animatePage];} 
      completion:^(BOOL finished){[self animatePage];}]; 

estaría muy agradecido para sugerencias de cómo repetir la misma animación sin tener que codificar número de veces que quiero que se repita esta animación


EDIT:

Me trataron de poner en práctica el siguiente código, pero sólo una animación en realidad llevar a cabo:

 [UIView animateWithDuration:0 
          delay:1 
         options:UIViewAnimationOptionCurveEaseIn 
        animations:^{ 

         [UIView setAnimationRepeatCount:2]; 
         [self animatePage]; 

        } 
        completion:nil]; 
+0

Ya sabes, estoy bastante seguro de que "removeAllAnimations" es lo que buscas aquí - ver respuesta a continuación, ¡salud! – Fattie

Respuesta

28

tenía el mismo problema - que faltaban un an'UIViewAnimationOptionRepeat'

Esto debería funcionar:

[UIView animateWithDuration:0 
         delay:1 
        options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionRepeat 
       animations:^{ 
        [UIView setAnimationRepeatCount:2]; // **This should appear in the beginning of the block** 
        [self animatePage]; 

       } 
       completion:nil]; 

hizo el truco para mí .

7

¿trató de establecer el repeatCount? + (void)setAnimationRepeatCount:(float)repeatCount

He intentado el siguiente bloque de código, y que sin duda repite 2x para mí (l era un UITextView que fue escalado por 2x en X dir y 3X en Y dir):

[UIView animateWithDuration:2 
delay:0.1 
options:UIViewAnimationOptionCurveEaseIn 
animations:^{ [UIView setAnimationRepeatCount:2]; 
l.transform = CGAffineTransformMakeScale(2,3); } completion:nil]; 
+0

No. ¡Buena idea! Pero, ¿cómo debería implementar esto? Lo siento si esto es básico, pero soy bastante nuevo en todo esto. –

+0

@DavidNeiss: Acabo de probar esto, pero no funciona. Si lo configuro en 2, solo se ejecutará una animación. Actualicé el código anterior en consecuencia, para que pueda ver cómo traté de implementarlo. Gracias por tu ayuda. –

+0

@David: debe editar ese código en su respuesta. –

2

la razón por la que enviaban viendo pero una animación es que, debido al hecho de que está llamando la animación de un bucle en el mismo runloop, resuting en la última llamada ganadora (una animación)

en lugar de llamar [self animatePage], intente llamar

[self performSelector:@selector(animatePage) withObject:nil afterDelay:.1 *temp]; 

esto creará sus llamadas en hilos separados.

puede que tenga que jugar con el intervalo de demora

+0

Veo lo que quiere decir, pero esto no funciona con intervalos cortos. Realmente necesito 0.1 y su línea de código sugerida solo funciona con 1.0 y superior (que es demasiado lento). Gracias por su aclaración, sin embargo! –

+2

Esto _no_ crea un hilo separado. –

Cuestiones relacionadas