Je suis intéressé par la suppression d'un lot de lignes à partir d'une base de données. UITableView
en utilisant l'animation tableView.deleteRows(at: [singleIndexPath], with: .automatic)
. Cependant, mon objectif est de cascader l'animation de suppression afin qu'elle se produise dans une animé en cascade de sorte qu'au lieu de retirer le lot entier de lignes, l'animation les montre retirées l'une après l'autre.
J'ai découvert une aide UITableView
où j'obtiens un bloc d'achèvement après qu'une animation est terminée, comme tel :
extension UITableView {
/// Perform a series of method calls that insert, delete, or select rows and sections of the table view.
/// This is equivalent to a beginUpdates() / endUpdates() sequence,
/// with a completion closure when the animation is finished.
/// Parameter update: the update operation to perform on the tableView.
/// Parameter completion: the completion closure to be executed when the animation is completed.
func performUpdate(_ update: ()->Void, completion: (()->Void)?) {
CATransaction.begin()
CATransaction.setCompletionBlock(completion)
// Table View update on row / section
beginUpdates()
update()
endUpdates()
CATransaction.commit()
}
}
Mon problème est de trouver comment utiliser le bloc automatiser l'animation de la suppression de ligne (et plus tard, de l'insertion de ligne). Actuellement, l'exemple de code suivant avec deux rangées IndexPath
a toujours une animation qui se produit en même temps, ce qui n'est pas mon objectif.
let singleIndexPath = IndexPath(row: 0, section: 0)
let anotherIndexPath = IndexPath(row: 1, section: 0)
self.tableView.performUpdate({
self.tableView.deleteRows(at: [singleIndexPath, anotherIndexPath], with: .automatic)
self.tableView.insertRows(at: [singleIndexPath, anotherIndexPath], with: .left)
//Happening at the same time, which is not what I want
}, completion: {
})
Tout conseil est le bienvenu.