我想知道是否有可能捕获在deleteRowsAtIndexPaths期间触发的动画是否结束?我想要做的是从UITableView删除一些所有行,除了我点击的一行。接下来我想在同一个UITableView中插入几行。这两个操作都在单独的beginUpadate / endUpdate块中执行。问题是在删除动画结束之前,插入动画开始,我希望它一个接一个地被触发,因为插入的行来自外部webservice。
我正在考虑在方法中包装插入和删除方法(在UITableView子类中),我可以用自定义的方法替换标准动画,并在第一个结束时使用objective-c块一个接一个地触发,但它似乎是不可能的或我不能这样做。
提前感谢您的帮助!
答案 0 :(得分:14)
我认为将表格更新包装在animateWithDuration
中会有效:
[UIView animateWithDuration:0.0 animations:^{
[coursesTable beginUpdates];
…
[coursesTable endUpdates];
} completion:^(BOOL finished) {
// Code to run when table updates are complete.
}];
我在Stack Overflow上找到的其他方法对我不起作用。
我一次使用这种技术并进行了足够的测试,以便在我调用表的endUpdates方法之后验证完成块被调用,并且调用它的时间似乎合理,但我重写了我的代码所以我不需要在我完全确认动画实际完成之前,它已经不复存在了。
答案 1 :(得分:0)
使用CATransaction
来捕捉任何动画的完成
CATransaction.begin()
CATransaction.setCompletionBlock({
// completion
})
// do your animation here
CATransaction.commit()
答案 2 :(得分:0)
从iOS 11到更高版本:
[tblProducts performBatchUpdates:^{
[self->tblProducts deleteRowsAtIndexPaths:@[self.animDeleteIndex] withRowAnimation:UITableViewRowAnimationFade];
} completion:^(BOOL finished) {
[self->tblProducts reloadData];
}];