Community, please help out a beginner! Can you tell me how to make such animation for TableView cells? Thank!
This gives something similar to what you want. You might need to make adjustments to it or improve the code snippet. You can work with the panGestureRecognizer property of the tableView
tableView.panGestureRecognizer.addTarget(self, action: #selector(didPan(_:)))
With this handler:
@objc func didPan(_ gesture: UIPanGestureRecognizer) {
guard gesture.state == .changed else { return }
let loc = gesture.location(in: tableView)
guard let touchedCellIndex = tableView.indexPathForRow(at: loc) else { return }
let n = tableView.numberOfRows(inSection: 0)
guard touchedCellIndex.row < n - 1 else { return }
if gesture.translation(in: tableView).y < 0 {
for (index, cell) in tableView.visibleCells.enumerated() {
guard let ip = tableView.indexPath(for: cell) else { return }
if ip.row > touchedCellIndex.row {
cell.transform = CGAffineTransform(translationX: 0.0, y: -gesture.velocity(in: tableView).y * 0.02 * tanh(CGFloat(index)))
UIView.animate(withDuration: 0.05 * Double(index), delay: 0.0) {
cell.transform = CGAffineTransform.identity
}
}
}
} else {
for (index, cell) in tableView.visibleCells.reversed().enumerated() {
guard let ip = tableView.indexPath(for: cell) else { return }
if ip.row < touchedCellIndex.row {
cell.transform = CGAffineTransform(translationX: 0.0, y: -gesture.velocity(in: tableView).y * 0.02 * tanh(CGFloat(index)))
UIView.animate(withDuration: 0.05 * Double(index), delay: 0.0) {
cell.transform = CGAffineTransform.identity
}
}
}
}
}
I am sure you can optimize this approach and make it more concise.