开发者

Callback for UITableView animations

开发者 https://www.devze.com 2022-12-29 23:20 出处:网络
Is there a delegate protocol that includes a callback for the end of开发者_开发技巧 animated changes to UITableView? Particularly reloadSection/Rows? Actually, there DOES seem to be a way to do this (

Is there a delegate protocol that includes a callback for the end of开发者_开发技巧 animated changes to UITableView? Particularly reloadSection/Rows?


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!


It's not the answer you want to hear but no* :(

The table view's delegate will respond to these methods only.

However, (it's a bit of a hack but) animations are about 0.35 seconds long do you could just call performSelector:withObject:afterdelay: . . .

*at least not as far as I know . . .

0

精彩评论

暂无评论...
验证码 换一张
取 消