UITableView,如何抓住动画的结尾?

时间:2010-03-04 10:51:43

标签: objective-c uitableview

我有一个包含很多行的UITableView。 它就像一个手风琴:http://docs.jquery.com/UI/Accordion 主细胞有子细胞,子细胞也有子细胞。所以这是一个三级tableView。

好吧,当用户选择一个单元格时,它会使用行动画扩展(或折叠)子单元格。 但我需要设置tableView的新大小和scrollView。

我在这个方法中做了所有这些事情:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

问题: 当用户点击一个单元格,然后快速点击一个单元格,第二个动画未完成,因此不显示二级的子单元格。但是已经设定了大小(考虑到已经显示了2级子系统)。

实际上我正忙着处理这个问题......但实在太糟糕了。

以下是我的代码示例:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

// Checking with times (with 0,5 second interval in order to be sure that the previous animation is finished !)

// Setting tableView & scollView heights

[tableView beginUpdates];
if(position.isExpanded == YES)
    [tableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationBottom];
else 
    [tableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationTop];
[tableView endUpdates];
}

所以,我想赶上这个动画的结尾。 或者,玩一种信号量(但我只有一个过程...) 有什么想法来解决这个问题吗?

请在回复中记住,我是iPhone开发的新手。

感谢。

2 个答案:

答案 0 :(得分:0)

动画由类CAAnimation的实例控制。此类支持方法- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag,该方法将传递给此实例的委托。此信息通常用于获取完成情况。

关于您的特殊要求,我将查看UIView课程参考。有几个任务处理该视图的动画 - 这是UITableView的基类。因此,对UIView有效的任何内容都应对表视图产生影响。

答案 1 :(得分:0)

另外:

您可以通过选中NSArray *animationKeys = [cell.layer animationKeys];并致电CAAnimation *animation = [cell.layer animationForKey:_a_key_];来获取动画。之后,您可以设置委托并按上述方式捕获完成。