2010-05-17 10 views

Respuesta

29

Set la alfa a cero antes de la animación, a continuación, animar la alfa a uno.

[fadingView setAlpha:0.0]; 
[containerView addSubview:fadingView]; 
[UIView beginAnimations:nil context:nil]; 
[fadingView setAlpha:1.0]; 
[UIView commitAnimations]; 

Antes de eliminar la vista, simplemente anime el alfa a cero.

Por cierto, la jerarquía de vistas es más de un árbol que una pila.

Editar:

Si no tienes otra limpieza después de la animación termina cuando el desvanecimiento de la vista, a continuación, utilizar:

[UIView setAnimationDelegate:fadingView]; 
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)]; 

Si ya está configurando un didStopSelector luego llamar removeFromSuperview allí.

+0

¿Qué sucede cuando mi fundido finaliza en 0.0? Parece eliminar mi subvista. Quiero que esto suceda, pero ¿debería preocuparme por la gestión de la memoria? Si agrego código explícitamente para eliminar la subvista, la animación no se muestra. – Moshe

+1

Utilice el '+ setAnimationDidStopSelector' método para eliminar el' fadingView' de la supervista. –

21

También es posible usar los bloques para eliminar un punto de vista de su súper vista después de que haya terminado el fundido de salida de animación:

[UIView animateWithDuration:0.2 
       animations:^{viewOut.alpha = 0.0;} 
       completion:^(BOOL finished){[viewOut removeFromSuperview];}]; 
0

Y en Swift ...

In

someSecondaryViewController.view.alpha = 0.0 
self.view.addSubview(someSecondaryViewController.view) 
UIView.animateWithDuration(0.2, animations: { self.someSecondaryViewController.view.alpha = 1.0 }) 

Out

UIView.animateWithDuration(0.2, animations: { self.someSecondaryViewController.view.alpha = 0.0 }) { (done:Bool) in 
     self.someSecondaryViewController.view.removeFromSuperview() 
} 
Cuestiones relacionadas