10

我想知道是否有可能捕捉到 deleteRowsAtIndexPaths 期间触发的动画是否结束?我想要做的是从 UITableView 中删除一些所有行,除了我点击的行。接下来我想在同一个 UITableView 中插入几行。这两个操作都在单独的 beginUpdate/endUpdate 块中执行。问题是在删除动画结束之前,插入动画开始了,我希望它一个接一个地被触发,因为插入的行来自外部 web 服务。

我正在考虑将插入和删除方法(在 UITableView 子类中)包装在可以用自定义动画替换标准动画并在第一个结束时使用objective-c块一个接一个地触发的方法中,但这似乎是不可能的,或者我可以不要这样做。

在此先感谢您的帮助!

4

3 回答 3

15

我相信将您的表格更新包装在animateWithDuration其中会起作用:

[UIView animateWithDuration:0.0 animations:^{
    [coursesTable beginUpdates];
    …
    [coursesTable endUpdates];
} completion:^(BOOL finished) {
    // Code to run when table updates are complete.
}];

我在 Stack Overflow 上发现的其他方法对我不起作用。

我曾经使用过这种技术并对其进行了足够的测试,以验证在我调用表的 endUpdates 方法之后调用了完成块,并且调用它的时间似乎合理,但是我重写了我的代码,所以我不再需要它了在我完全验证动画实际上已经完成之前。

于 2012-10-26T23:16:17.367 回答
0

从 iOS 11 到更高版本:

[tblProducts performBatchUpdates:^{
        [self->tblProducts deleteRowsAtIndexPaths:@[self.animDeleteIndex] withRowAnimation:UITableViewRowAnimationFade];
    } completion:^(BOOL finished) {
        [self->tblProducts reloadData];
}];
于 2019-09-27T09:26:09.373 回答
0

用于CATransaction捕捉任何动画的完成

CATransaction.begin()
CATransaction.setCompletionBlock({
     // completion
})
// do your animation here
CATransaction.commit()
于 2017-07-13T10:05:17.847 回答