Ich habe eine UITableView, die zwei Modi hat. Wenn wir zwischen den Modi wechseln, habe ich eine unterschiedliche Anzahl von Abschnitten und Zellen pro Abschnitt. Idealerweise würde es eine coole Animation machen, wenn der Tisch wächst oder schrumpft.
Hier ist der Code, den ich ausprobiert habe, der aber nichts bewirkt:
CGContextRef context = UIGraphicsGetCurrentContext();
[UIView beginAnimations:nil context:context];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.5];
[self.tableView reloadData];
[UIView commitAnimations];
Irgendwelche Gedanken darüber, wie ich das machen könnte?
cocoa-touch
animation
Vertexwahn
quelle
quelle
_tableView.reloadSections(NSIndexSet(index: 0), withRowAnimation: .Fade)
Insbesondere wird jedoch nur Abschnitt 0 aktualisiert, der der erste Standardabschnitt ist.Vielleicht möchten Sie verwenden:
Ziel c
Schnell
Swift 3, 4 & 5
Keine Probleme. : D.
Sie können auch einen der
UIViewAnimationOptionTransitions
gewünschten Effekte für coolere Effekte verwenden:transitionNone
transitionFlipFromLeft
transitionFlipFromRight
transitionCurlUp
transitionCurlDown
transitionCrossDissolve
transitionFlipFromTop
transitionFlipFromBottom
quelle
[_tableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, sectionCount)] withRowAnimation:UITableViewRowAnimationFade];
Haben Sie mehr Freiheit mit
CATransition
Klasse.Es ist nicht auf das Verblassen beschränkt, sondern kann auch Bewegungen ausführen.
Beispielsweise:
(nicht vergessen zu importieren
QuartzCore
)Ändern Sie das
type
, um Ihren Bedürfnissen zu entsprechen, wiekCATransitionFade
usw.Implementierung in Swift:
Referenz für CATransition
Swift 5:
quelle
layer
Eigenschaft von aUITableViewCell
.Ich glaube, Sie können einfach Ihre Datenstruktur aktualisieren, dann:
Außerdem ist "withRowAnimation" nicht gerade ein Boolescher Wert, sondern ein Animationsstil:
quelle
Bei all diesen Antworten wird davon ausgegangen, dass Sie eine UITableView mit nur einem Abschnitt verwenden.
Um Situationen, in denen Sie mehr als einen Abschnitt haben, genau zu behandeln, verwenden Sie:
(Hinweis: Sie sollten sicherstellen, dass Sie mehr als 0 Abschnitte haben!)
Beachten Sie außerdem, dass möglicherweise eine NSInternalInconsistencyException auftritt, wenn Sie versuchen, Ihre Datenquelle gleichzeitig mit diesem Code zu aktualisieren. In diesem Fall können Sie eine ähnliche Logik verwenden:
quelle
Der Weg, dies zu erreichen, besteht darin, die tableView anzuweisen, Zeilen und Abschnitte mit dem zu entfernen und hinzuzufügen
insertRowsAtIndexPaths:withRowAnimation:
,deleteRowsAtIndexPaths:withRowAnimation:
,insertSections:withRowAnimation:
UnddeleteSections:withRowAnimation:
Methoden von UITableView.
Wenn Sie diese Methoden aufrufen, animiert die Tabelle die von Ihnen angeforderten Elemente ein / aus und ruft dann reloadData für sich selbst auf, damit Sie den Status nach dieser Animation aktualisieren können. Dieser Teil ist wichtig. Wenn Sie alles animieren, aber die von der dataSource der Tabelle zurückgegebenen Daten nicht ändern, werden die Zeilen nach Abschluss der Animation erneut angezeigt.
Ihr Anwendungsfluss wäre also:
[self setTableIsInSecondState:YES];
[myTable deleteSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:YES]];
Solange die dataSource-Methoden Ihrer Tabelle durch Aktivieren
[self tableIsInSecondState]
(oder was auch immer) den richtigen neuen Satz von Abschnitten und Zeilen zurückgeben, wird der gewünschte Effekt erzielt .quelle
Ich kann die Top-Antwort nicht kommentieren, aber eine schnelle Implementierung wäre:
Sie können so viele Abschnitte einschließen, wie Sie im ersten Argument für reloadSections aktualisieren möchten.
Weitere Animationen finden Sie in den Dokumenten: https://developer.apple.com/reference/uikit/uitableviewrowanimation
Überblenden Die eingefügten oder gelöschten Zeilen oder Zeilen werden in die Tabellenansicht ein- oder ausgeblendet.
rechts Die eingefügte Zeile oder die eingefügten Zeilen werden von rechts eingeblendet. Die gelöschte Zeile oder die gelöschten Zeilen werden nach rechts verschoben.
left Die eingefügten Zeilen werden von links eingefügt. Die gelöschte Zeile oder die gelöschten Zeilen werden nach links verschoben.
oben Die eingefügte Zeile oder die eingefügten Zeilen werden von oben hineingeschoben. Die gelöschte Zeile oder die gelöschten Zeilen werden nach oben verschoben.
unten Die eingefügte Reihe oder Reihen werden von unten hineingeschoben. Die gelöschte Zeile oder die gelöschten Zeilen werden nach unten verschoben.
case none Die eingefügten oder gelöschten Zeilen verwenden die Standardanimationen.
Mitte Die Tabellenansicht versucht, die alten und neuen Zellen in dem Raum zu zentrieren, den sie belegt haben oder belegen werden. Verfügbar in iPhone 3.2.
automatisch Die Tabellenansicht wählt einen geeigneten Animationsstil für Sie. (Eingeführt in iOS 5.0.)
quelle
Swift 4 Version für @dmarnel Antwort:
quelle
Schnelle Implementierung:
quelle
Für Swift 4
quelle
In meinem Fall wollte ich der Tabellenansicht 10 weitere Zeilen hinzufügen (für eine Funktionalität vom Typ "Weitere Ergebnisse anzeigen"), und ich habe Folgendes getan:
In den meisten Fällen verwenden Sie anstelle von "self.numberOfRows" normalerweise die Anzahl der Objektarrays für die Tabellenansicht. Um sicherzustellen, dass diese Lösung für Sie gut funktioniert, muss "arrayOfIndexPaths" ein genaues Array der Indexpfade der eingefügten Zeilen sein. Wenn die Zeile für einen dieser Indexpfade vorhanden ist, kann der Code abstürzen. Verwenden Sie daher die Methode "reloadRowsAtIndexPaths: withRowAnimation:" für diese Indexpfade, um Abstürze zu vermeiden
quelle
Wenn Sie UITableView-Zellen eigene benutzerdefinierte Animationen hinzufügen möchten, verwenden Sie
um ein Array von sichtbaren Zellen zu erhalten. Fügen Sie dann jeder Zelle eine benutzerdefinierte Animation hinzu.
Schauen Sie sich diesen Kern an, den ich für eine reibungslose benutzerdefinierte Zellenanimation gepostet habe. https://gist.github.com/floprr/1b7a58e4a18449d962bd
quelle
Das Animieren ohne reloadData () in Swift kann folgendermaßen erfolgen (ab Version 2.2):
Falls Sie reloadData () nach dem Ende der Animation aufrufen müssen, können Sie die Änderungen in CATransaction folgendermaßen übernehmen:
Die Logik wird für den Fall angezeigt, dass Sie Zeilen löschen. Die gleiche Idee gilt jedoch auch für das Hinzufügen von Zeilen. Sie können die Animation auch in UITableViewRowAnimation.Left ändern, um sie ordentlich zu gestalten, oder aus der Liste der anderen verfügbaren Animationen auswählen.
quelle
quelle
.3
zweimal einstellen ?Zum erneuten Laden aller Abschnitte , nicht nur eines mit benutzerdefinierter Dauer .
Benutzerparameter
duration
vonUIView.animate
, um die benutzerdefinierte Dauer festzulegen.quelle
Native
UITableView
Animationen in SwiftEinfügen und Löschen von Zeilen auf einmal mit,
tableView.performBatchUpdates
damit sie gleichzeitig auftreten. Aufbauend auf der Antwort von @iKenndac verwenden Sie Methoden wie:tableView.insertSections
tableView.insertRows
tableView.deleteSections
tableView.deleteRows
Ex:
Dadurch wird ein Abschnitt an der Nullposition mit einer Animation eingefügt, die von oben geladen wird. Dadurch wird die
cellForRowAt
Methode erneut ausgeführt und an dieser Position nach einer neuen Zelle gesucht. Auf diese Weise können Sie die gesamte Tabellenansicht mit bestimmten Animationen neu laden.Betreff: Bei der OP-Frage wäre ein bedingtes Flag erforderlich gewesen, um die Zellen für den Status der alternativen Tabellenansicht anzuzeigen.
quelle