Actually, there DOES seem to be a way to do this (though not nearly as straightforward as it ought to be!).
While there's no direct access to some kind of callback, it appears that UITableView
animations take place within a CAAnimation
. Therefore, simply accessing the completionBlock
of the CAAnimation
seems to give you what you want.
Here's how I got 2 animations to chain in my UITableView
subclass:
#pragma mark - Section expanding/collapsing
- (void)toggleSection:(NSInteger)index {
int expandedSection = [self ExpandedSection];
if (expandedSection != NO_EXPANDED_SECTIONS_INDEX) {
[self beginUpdates];
[self collapseSection:@(expandedSection)];
[CATransaction setCompletionBlock:^{
if (expandedSection != index) {
[self beginUpdates];
[self expandSection:@(index)];
[self endUpdates];
}
}];
[self endUpdates];
} else {
[self expandSection:@(index)];
}
}
The code in the collapseSection:
and expandingSection:
methods simply adds/removes sub-sections that need to be collapsed or expanded. The key point here, though, is that, when using this code, I am finally able to collapse one sub-section THEN expand the next sub-section. Before, both animations were occurring concurrently, which was visually unappealing.
I hope this helps you! I struggled through this for a long time, banging my head against the wall until I found this.
This is written against iOS 6.0. I also really hope that some future version makes this workaround/hack obsolete!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…