Gibt es eine Möglichkeit, entweder die Dauer für UITableView-Zeilenanimationen anzugeben oder einen Rückruf zu erhalten, wenn die Animation abgeschlossen ist?
Ich möchte die Bildlaufanzeigen nach Abschluss der Animation blinken lassen. Vorher den Blitz zu machen, macht nichts. Bisher besteht die Problemumgehung darin, eine halbe Sekunde zu verzögern (dies scheint die Standardanimationsdauer zu sein), dh:
[self.tableView insertRowsAtIndexPaths:newRows
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView performSelector:@selector(flashScrollIndicators)
withObject:nil
afterDelay:0.5];
ios
iphone
uitableview
animation
cocoa-touch
Daniel Dickison
quelle
quelle
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath
Antworten:
Wenn Sie dies tun möchten, gibt es heutzutage eine neue Funktion ab iOS 11 :
In Aktualisierungsabschlüssen platzieren Sie denselben Code wie im Abschnitt beginUpdates () / endUpdates. Und die Fertigstellung wird nach allen Animationen ausgeführt.
quelle
Bin gerade darauf gestoßen. So geht's:
Ziel c
Schnell
quelle
setAnimationDuration
scheint die Einfüge- / Löschdauer nicht zu beeinflussen. iOS 6Aufbauend auf karwag der feinen Antwort , beachten Sie, dass auf iOS 7, rund um das CATransaction mit einer UIView - Animation bietet die Kontrolle über die Tisch Animationsdauer.
Die Dauer der UIView-Animation hat keinen Einfluss auf iOS 6. Möglicherweise werden iOS 7-Tabellenanimationen auf UIView-Ebene anders implementiert.
quelle
Das ist ein verdammt nützlicher Trick! Ich habe eine UITableView-Erweiterung geschrieben, um zu vermeiden, dass ständig CATransaction-Inhalte geschrieben werden.
Dies wird wie folgt verwendet:
quelle
setCompletionBlock
iOS 4+Wenn Sie Brents feine Antwort verkürzen, können Sie dies für mindestens iOS 7 kurz und bündig in einen Aufruf von [UIView animateWithDuration: delay: options: animations: finish:] einbinden:
Ich kann die Standardanimationskurve jedoch nicht von etwas anderem als EaseInOut überschreiben.
quelle
Hier ist eine Swift-Version von Karwags Antwort
quelle
Für mich brauchte ich das für eine collectionView. Ich habe eine einfache Erweiterung vorgenommen, um dies zu lösen:
quelle
Da die
performBatch
Methode von tableView nur ab iOS 11 verfügbar ist , können Sie die folgende Erweiterung verwenden:quelle
Sie könnten versuchen, den insertRowsAtIndexPath in a zu verpacken
Transaktion, dann machen Sie den Flash danach.
quelle