2012-08-09 8 views
10

Zastanawiam się, czy istnieje jakaś możliwość złapania, czy animacja wystrzelona podczas deleteRowsAtIndexPaths się skończyła? Co próbuję zrobić, to usunięcie niektórych wierszy z UITableView z wyjątkiem jednego, który stuknął. Następnie chcę wstawić kilka wierszy do tego samego UITableView. Obie operacje są wykonywane w oddzieleniu bloków beginUpadate/endUpdate. Problem polega na tym, że przed usunięciem animacji rozpoczyna się animacja wstawiania i chcę, aby była uruchamiana jedna po drugiej, ponieważ wstawione wiersze pochodzą z zewnętrznego serwisu WWW.Jak złapać koniec animacji w deleteRowsAtIndexPaths

Zastanawiam się nad zawijaniem metod wstawiania i usuwania (w podklasie UITableView) w metodach, w których można zastąpić standardową animację niestandardowymi i użyć bloków cel-c do strzelania jeden po drugim, gdy pierwszy koniec, ale wydaje się impozycja albo po prostu nie mogę tego zrobić.

Z góry dziękuję za pomoc!

Odpowiedz

14

wierzę, że owijanie aktualizację tabeli w animateWithDuration będzie działać:

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

Inne metody, które znalazłem je tutaj na przepełnienie stosu nie działa dla mnie.

Użyłem tej techniki za jednym razem i przetestowałem ją wystarczająco, aby sprawdzić, czy blok zakończenia został wywołany po wywołaniu metody endUpdates tabeli, a czas, w którym został wywołany wydawał się uzasadniony, ale przepisałem kod, więc nie potrzebuję go więcej, zanim całkowicie zweryfikuję, że animacja została faktycznie zakończona.

+2

człowieka jesteś fantastyczna !! dzięki za tę sztuczkę – Abolfoooud

0

użycie CATransaction złapać zakończenie wszelkich animacji za

CATransaction.begin() 
CATransaction.setCompletionBlock({ 
    // completion 
}) 
// do your animation here 
CATransaction.commit() 
Powiązane problemy