2012-08-09 8 views
10

Me preguntaba si hay alguna posibilidad de atrapar si finalizó la animación activada durante deleteRowsAtIndexPaths? Lo que intento hacer es eliminar algunas filas de UITableView, excepto una que hice tapping. A continuación, deseo insertar algunas filas en el mismo UITableView. Ambas operaciones se realizan en bloques beginUpadate/endUpdate separados. El problema es que antes de eliminar la animación, se inicia la animación de inserción y quiero que se active una tras otra porque las filas insertadas provienen del servicio web externo.Cómo capturar un final de animación en deleteRowsAtIndexPaths

Estaba pensando en envolver los métodos de inserción y eliminación (en la subclase UITableView) en métodos donde podría reemplazar la animación estándar por personalizada y usar bloques objetivo-c para disparar una tras otra cuando la primera termina pero parece imposible o simplemente no puedo hacerlo

Gracias de antemano por su ayuda!

Respuesta

14

creo que envolver su actualización de la tabla en animateWithDuration funcionaría:

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

Otros métodos que he encontrado aquí sugeridas desbordamiento de pila no funcionó para mí.

Utilicé esta técnica al mismo tiempo y la probé lo suficiente para verificar que se llamaba al bloque de finalización después de llamar al método endUpdates de la tabla y el momento en que se llamó parecía razonable, pero reescribí el código así que no lo hice Lo necesito más antes de haber verificado por completo que la animación realmente se terminó.

+2

hombre que eres fantástica !! gracias por este truco – Abolfoooud

0

uso CATransaction para coger la finalización de cualquier animación

CATransaction.begin() 
CATransaction.setCompletionBlock({ 
    // completion 
}) 
// do your animation here 
CATransaction.commit() 
Cuestiones relacionadas