2012-08-09 13 views
10

Mi chiedevo se c'è qualche possibilità di catturare se l'animazione attivata durante deleteRowsAtIndexPaths è terminata? Quello che sto cercando di fare è rimuovere alcune tutte le righe da UITableView tranne uno che ho toccato. Successivamente voglio inserire poche righe nello stesso UITableView. Entrambe le operazioni vengono eseguite in blocchi beginUpadate/endUpdate separati. Il problema è che prima di eliminare l'animazione termina l'animazione di inserimento e voglio che venga attivata una dopo l'altra perché le righe inserite provengono da un webservice esterno.Come catturare un'animazione fine in deleteRowsAtIndexPaths

Stavo pensando di avvolgere l'inserimento e l'eliminazione dei metodi (nella sottoclasse UITableView) in metodi in cui posso sostituire l'animazione standard con quelli personalizzati e utilizzare i blocchi obiettivo-c per sparare uno dopo l'altro quando il primo termina ma sembra impossibile o non posso proprio farlo.

Grazie in anticipo per il vostro aiuto!

risposta

14

credo che avvolgendo l'aggiornamento tavolo animateWithDuration avrebbe funzionato:

[UIView animateWithDuration:0.0 animations:^{ 
    [coursesTable beginUpdates]; 
    … 
    [coursesTable endUpdates]; 
} completion:^(BOOL finished) { 
    // Code to run when table updates are complete. 
}]; 

Altri metodi che ho trovato qui suggerito su Stack Overflow non ha funzionato per me.

Ho usato questa tecnica contemporaneamente e l'ho testato abbastanza per verificare che il blocco di completamento fosse chiamato dopo aver chiamato il metodo endUpdates della tabella e l'ora in cui è stato chiamato sembrava ragionevole, ma ho riscritto il mio codice in modo da non ne ho più bisogno prima che avessi verificato completamente che l'animazione era effettivamente finita.

+2

uomo sei fantastico !! grazie per questo trucco – Abolfoooud

0

uso CATransaction per catturare il completamento di ogni animazione

CATransaction.begin() 
CATransaction.setCompletionBlock({ 
    // completion 
}) 
// do your animation here 
CATransaction.commit() 
Problemi correlati