Czy istnieje sposób określenia czasu trwania animacji wiersza UITableView lub uzyskania wywołania zwrotnego po zakończeniu animacji?
To, co chciałbym zrobić, to migać wskaźnikami przewijania po zakończeniu animacji. Wykonanie flashowania przedtem nic nie robi. Jak dotąd obejściem, które mam, jest opóźnienie o pół sekundy (wydaje się, że jest to domyślny czas trwania animacji), tj .:
[self.tableView insertRowsAtIndexPaths:newRows
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView performSelector:@selector(flashScrollIndicators)
withObject:nil
afterDelay:0.5];
ios
iphone
uitableview
animation
cocoa-touch
Daniel Dickison
źródło
źródło
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath
Odpowiedzi:
Obecnie, jeśli chcesz to zrobić, pojawiła się nowa funkcja począwszy od iOS 11 :
W zamknięciach aktualizacji umieszczasz ten sam kod, co w sekcji beginUpdates () / endUpdates. Zakończenie jest wykonywane po wszystkich animacjach.
źródło
Właśnie to spotkałem. Oto jak to zrobić:
Cel C
Szybki
źródło
setAnimationDuration
nie wydaje się mieć wpływu na czas trwania wstawiania / usuwania. iOS 6Rozwijając dobrą odpowiedź Karwaga , zauważ, że na iOS 7 otoczenie transakcji CAT animacją UIView zapewnia kontrolę nad czasem trwania animacji tabeli.
Czas trwania animacji UIView nie ma wpływu na iOS 6. Być może animacje tabel w iOS 7 są implementowane inaczej, na poziomie UIView.
źródło
To cholernie przydatna sztuczka! Napisałem rozszerzenie UITableView, aby uniknąć ciągłego pisania elementów CATransaction.
Jest to używane w następujący sposób:
źródło
setCompletionBlock
iOS 4+Skracając dobrą odpowiedź Brenta , przynajmniej dla iOS 7 możesz zawinąć to wszystko zwięźle w [UIView animateWithDuration: delay: options: animations: complete:] call:
jednak wydaje mi się, że nie mogę zastąpić domyślnej krzywej animacji z niczego innego niż EaseInOut.
źródło
Oto szybka wersja odpowiedzi karwaga
źródło
Dla mnie potrzebowałem tego dla collectionView. Zrobiłem proste rozszerzenie, aby rozwiązać ten problem:
źródło
Ponieważ
performBatch
metoda tableView jest dostępna tylko od iOS 11 , możesz użyć następującego rozszerzenia:źródło
Możesz spróbować opakować insertRowsAtIndexPath w plik
transakcja, a następnie wykonaj flashowanie.
źródło