iPhone - Rileva la fine dell'animazione
-
02-10-2019 - |
Domanda
Come faccio a rilevare la fine dell'animazione di una vista modale (quando faccio un respingere)? (Sto parlando MFMailComposeViewController che non è stato creato da me ...)
Grazie
Soluzione
Il controller di vista modale ha un metodo -viewDidDisappear:
che viene richiamato automaticamente ogni volta che la visualizzazione viene rimosso dallo schermo. È possibile ignorare questo metodo nel controller di vista modale a fare quello che vuoi.
Inoltre, si può prendere in considerazione l'implementazione del metodo -viewDidAppear:
nel controller della vista di cui vista viene rivelato dal tuo vista modale scomparendo.
Altri suggerimenti
È possibile sottoclasse MFMailComposeViewController e sovraccaricare la sua -viewDidDisappear:
.
@interface MyCtrler : MFMailComposeViewController
@end
@implementation MyCtrler
-(void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
// do anything you like
}
@end
avevo bisogno di fare qualcosa dopo che respinge una vista modale, e solo quando è sicuro che la vista modale è davvero andato (stato completamente dealloc-ndr). Così viewDidDisappear e dei suoi amici nel vista modale erano troppo presto per me.
Il modo più semplice che ho trovato è stato quello di ritardare solo il mio codice con un NSTimer. Quando vista modale chiama suo delegato e le invoca delegato eliminando la vista modale, si mette in coda anche il codice da eseguire quando la vista modale è andato. Il momento era qualcosa come 300 ms o 400 ms. (C'è un modo per recuperare i tempi effettivi da qualche parte?)
Normalmente per essere avvisati quando un'animazione è completa si imposta un delegato con l'invio di setAnimationDelegate: alla classe UIView.
Quando un VC è respinto con [someVC dismissModalViewControllerAnimated:YES]
non è possibile impostare il delegato di animazione, ma se si invia NO invece e fare la tua propria animazione di vista del VC si possono impostare il delegato ed essere avvisato quando l'animazione è stata completata.