2010-02-02 15 views
7

He intentado añadir una animación a viewDidLoad y viewDidAppear, pero no funciona:Cómo agregar una animación a UIView en viewDidAppear?

- (void)viewDidAppear:(BOOL)animated{ 
[UIView beginAnimations:@"transition" context:NULL]; 
[UIView setAnimationTransition:110 forView:self.view cache:YES]; 
[UIView commitAnimations]; 
} 

¿Por qué?

Respuesta

0

No le está diciendo a la vista a qué estado debe animar para que no haga nada. Debe colocar el código entre beginAnimations:context: y commitAnimations que cambia el aspecto de la vista (por ejemplo, eliminando una subvista y agregando otra).

+0

Hm, creo que no necesito decirle esto. Probé mi código en un IBAction y funciona. Escribí setAnimationTransition: forView: , así que escribí que la animación debería estar en la propia vista. Simplemente no funciona en viewDidLoad y viewDidAppear-methode. – Flocked

0
  1. no se está usando beginAnimations: y commitAnimations correctamente. Se supone que debes poner algo entre ellos que normalmente no estaría animado: p. con self.view.alpha = 0.5 obtienes un efecto de desvanecimiento. No tienen ningún efecto sobre nada que no esté entre ellos.

  2. En el momento en que se llama viewDidAppear:, su vista, bueno ... ha aparecido. Es muy tarde para animar cualquier cosa. Lo que realmente quiero hacer es algo como esto:

    - (void)showMyViewWithAnimation { 
        [UIView beginAnimations:nil context:nil]; 
        [UIView setAnimationTransition:110 forView:childView cache:YES]; 
        [parentView addSubview:childView]; 
        [UIView commitAnimations]; 
    } 
    

    En el ejemplo anterior, childView es lo que en su ejemplo se llama self.view.

  3. Escriba el nombre de la transición; nadie sabe qué es 110 al mirarlo. Es un mal estilo. </pedantería>

+0

El error en ese código es que deberías estar haciendo 'setAnimationTransition: forView:' en 'self.view', no' drum.view'. En los documentos, dice: "Establecer la transición en la vista de contenedor". – lawrence

+0

Pero quiero el efecto para drum.view;) Esa es la razón, por qué traté de obtener la animación en el viewDidLoad de drumViewController. – Flocked

24

Yo tenía el mismo problema y creo que he encontrado la solución en este SO question.

Cuando se llama a viewDidAppear, aún no ve nada en la pantalla (a pesar del nombre), pero está a punto de hacerlo. A continuación, puede usar un selector de rendimiento: withDelay o un NSTimer para iniciar su animación. La demora puede ser 0.1 y tu animación se reproducirá justo cuando aparezca la pantalla.

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    NSLog(@"View did appear!"); 

    [self performSelector:@selector(animationCode) withObject:nil afterDelay:0.1f]; 
} 

- (void)animationCode { 
    // you animation code 
} 
+0

Esto funcionó para mí. ¡Gracias! – windson

+0

He leído muchos artículos antes. Y solo esto me sucedió, gracias. –

+0

Gracias! ¡Esto funcionó para mí también! –

Cuestiones relacionadas