2011-01-13 3 views
5

La mia app ha una barra delle schede con due viste differenti. Nella prima scheda, la sua vista ha un'animazione a ciclo continuo.iphone: riavvia l'animazione in loop dopo che la vista è nascosta, quindi riappare?

Quando faccio clic sulla seconda scheda, quindi tornare al primo, l'animazione è stata interrotta. So che potrei ricominciare da capo in una viewWillAppear: method, ma il problema è più grande di quello. Nello specifico, l'animazione si interrompe anche se l'app passa allo stato di background, quindi torna in primo piano. In tal caso, viewWillAppear non viene richiamato sulla transizione in primo piano, quindi la tecnica viewWillAppear non farebbe nulla.

Qual è il modo migliore per gestire questa situazione?

Grazie.

risposta

4

Per mantenere l'incapsulamento, correttamente non si desidera che il proprio AppDelegate sappia quali viste devono riprendere le animazioni. Ma puoi avere la vista che contiene il registro di animazione per la notifica corrispondente (ad esempio nel metodo init della vista) e riavviare l'animazione su se stesso.

[[NSNotificationCenter defaultCenter] 
    addObserver:self 
     selector:@selector(startAnimation) 
      name:UIApplicationWillEnterForegroundNotification 
     object:nil]; 

... e non dimenticate di annullare la registrazione dal centro di notifica nel metodo dealloc.

+0

Il modo migliore per farlo! Grazie. –

0

È possibile impostare l'animazione per continuare nel metodo applicationWillEnterForeground da AppDelegate. Se si dispone di un riferimento al controller di visualizzazione della prima scheda in AppDelegate, è sufficiente chiamare il metodo viewWillAppear del controller di visualizzazione da AppDelegate.

+0

Sì, questo è quello che ho capito. Non mi è piaciuta molto questa soluzione, perché mi costringe a esporre molte funzionalità del controller di visualizzazione al delegato dell'app, che a mio avviso dovrebbe essere nascosto. (Perché il delegato dell'app deve sapere se i controller della mia vista hanno o meno animazioni?), Ma funziona, quindi immagino che sia il modo per farlo ora. –