2011-06-17 14 views
7

Quiero crear una animación simple cambiando valor alfa:iOS: animación simple

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:2]; 
[view1 setAlpha:0.00]; 
[UIView commitAnimations]; 

Ok de esta manera puedo cambiar el valor alfa durante dos segundos y trabaja muy bien, pero yo quiero que esto: Cuando alpha es 0 la animación debe comenzar en otro momento a alpha = 1 Entonces la animación debe ser: alpha 0 -> alpha 1 -> alpha 0 -> alpha 1 -> ... y así sucesivamente con una duración de dos segundos. ¿Me puedes ayudar?

mi código completo es

-(IBAction){ 
FirstViewController *firstViewController = [[[FirstViewController alloc] init]autorelease]; 
[firstViewController.label1 setAlpha:1.00]; 
[firstViewController.label2 setAlpha:1.00]; 
view = firstViewController.viewFirst; //this is my view and I copy in other view 
[self fadeOut:nil finished:nil context:nil];} 

- (void) fadeOut:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { 


[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:2]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDidStopSelector:@selector(fadeIn:finished:context:) ]; 
[view setAlpha:0.00]; 
[UIView commitAnimations]; 
} 

- (void) fadeIn:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:2]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDidStopSelector:@selector(fadeOut:finished:context:) ]; 
[view setAlpha:1.00]; 
[UIView commitAnimations]; 
} 

Respuesta

6
- (void) fadeOut:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:2]; 
    [UIView setAnimationDelegate:self]; 
    if(animationRunning){ 
     [UIView setAnimationDidStopSelector:@selector(fadeIn:finished:context:) ]; 
    } 
    [view1 setAlpha:0.00]; 
    [UIView commitAnimations]; 
} 

- (void) fadeIn:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:2]; 
    [UIView setAnimationDelegate:self]; 
    if(animationRunning){ 
     [UIView setAnimationDidStopSelector:@selector(fadeOut:finished:context:) ]; 
    } 
    [view1 setAlpha:1.00]; 
    [UIView commitAnimations]; 
} 

Estos se llaman entre sí en la final de la animación ...

Todo lo que necesita hacer para iniciar la pelota rolling es llamada:

[self fadeOut:nil finished:nil context:nil]; 
+0

intentaré ..... – CrazyDev

+1

y si quiero detener esta animación? – CrazyDev

+0

advertencia: Problema semántico: Método '-fadeOut: finalizado: contexto:' no encontrado (tipo de retorno predeterminado en 'id') ¿por qué? – CrazyDev

3

se puede establecer un manejador de finalización de animación (ya sea mediante la API basada en bloques o +(void)setAnimationDidStopSelector:(SEL)selector) y empezar la siguiente.

Alternativamente echar un vistazo a los métodos:

+ setAnimationRepeatCount: 
+ setAnimationRepeatAutoreverses: 
+0

+1 para mencionar la repetición y las autorrevoluciones. –

0

Creo que puede usar una sola función (basado en la respuesta anterior fu nctions):

- (void) fadeIn:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:2]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(fadeIn:finished:context:) ]; 
    [view1 setAlpha:mod(1-view1.alpha)]; 
    [UIView commitAnimations]; 
} 

El alplha no debe ser un valor negativo, por lo que un mod debe ser aplicado

10

En iOS 4 y más adelante se puede hacer

view1.alpha = 1.0; 
    [UIView animateWithDuration:2.0 
          delay:0.0 
         options:UIViewAnimationOptionRepeat|UIViewAnimationAutoReverse 
        animations:^{ 
         view1.alpha = 0.0; 
        } 
        completion:nil 
    ]; 
+1

Esta es la manera recomendada. – zekel

+0

La mejor solución para la respuesta ... –

0

Se crea un ViewController, como a continuación

FirstViewController *firstViewController = [[[FirstViewController alloc] init]autorelease]; 

Y a continuación, añadir animación a ella, pero ¿cuándo añadir firstViewController.view en vista jerarquía (addSub ver). Además, simplemente llamando a

[[[FirstViewController alloc] init]autorelease] 

no se creará el objeto label a menos que se haya anulado su método init. Pruebe la depuración si la etiqueta está asignada en ese punto de tiempo. También para la animación utilizo la herramienta de visualización con el método de bloque de finalización

Cuestiones relacionadas