2010-05-17 21 views

risposta

29

Impostare l'alfa su zero prima di animare, quindi animare l'alfa su uno.

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

Prima di rimuovere la vista, è sufficiente animare nuovamente l'alfa a zero.

BTW, la gerarchia di viste è più di un albero che di uno stack.

Edit:

Se non avete altra pulitura dopo l'animazione si conclude quando la dissolvenza in chiusura la vista, quindi utilizzare:

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

Se sei già imposta una didStopSelector quindi chiamare removeFromSuperview lì.

+0

Cosa succede quando la mia dissolvenza termina a 0.0? Sembra che stia rimuovendo la mia sottoview. Voglio che ciò accada, ma dovrei preoccuparmi della gestione della memoria? Se aggiungo esplicitamente del codice per rimuovere la sottoview, l'animazione non viene mostrata. – Moshe

+1

Usa il metodo '+ setAnimationDidStopSelector' per rimuovere' fadingView' dalla superview. –

21

Si potrebbe anche utilizzare i blocchi per rimuovere una vista dalla sua super vista dopo che è terminato il fade out di animazione:

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

E in 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() 
} 
Problemi correlati