pixelfreak pixelfreak - 3 months ago 24
iOS Question

How to detect that animation has ended on UITableView beginUpdates/endUpdates?

I am inserting/deleting table cell using

insertRowsAtIndexPaths/deleteRowsAtIndexPaths
wrapped in
beginUpdates/endUpdates
. I am also using
beginUpdates/endUpdates
when adjusting rowHeight. All these operations are animated by default.

How can I detect that animation has ended when using
beginUpdates/endUpdates
?

Answer

What about this?

[CATransaction begin];

[CATransaction setCompletionBlock:^{
    // animation has finished
}];

[tableView beginUpdates];
// do some work
[tableView endUpdates];

[CATransaction commit];

This works because the tableView animations use CALayer animations internally. That is, they add the animations to any open CATransaction. If no open CATransaction exists (the normal case), then one is implicitly began, which is ended at the end of the current runloop. But if you begin one yourself, like is done here, then it will use that one.

Comments