UITableView beginUpdates / endUpdates回调

时间:2012-01-09 20:09:13

标签: iphone ios uitableview animation

我正在使用beginUpdates / endUpdates块对tableView进行更改。在整个过程中,我需要更新一个阴影,以便它反映tableView的当前组合。

我尝试为tableView的contentSize设置KVO,但只有在动画完成后才会在endUpdates上调用它。我想要的是每次contentSize改变时调用它(即使它只是一个像素)。有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:24)

这个怎么样?

[CATransaction begin];

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

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

[CATransaction commit];

答案 1 :(得分:1)

鲁道夫的方法对我来说并不像预期的那样顺利。在我的情况下,我使用这个在UITableView上选择一行,并且Rudolf的方法导致表格进行两次动画并稍微冻结:beginUpdates / endUpdates中的动画,一点冻结和完成块上的动画

 [tableView selectRowAtIndexPath:indexPath
                        animated:YES
                  scrollPosition:scrollPosition];

这启发了我创建这个代码......这无缝地工作:

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

答案 2 :(得分:0)

很抱歉,我认为你不能这样做。在调用beginUpdates之后对表格进行更改时,更改将在endUpdates之后动画为单个动画。在这些动画期间没有动画回调。我没有试过这个,所以不知道它是否适用于此,但您可以尝试嵌套beginUpdatesendUpdates并在每个endUpdates之后更新您的阴影。