如何判断 UITableView 动画何时完成?

Posted

技术标签:

【中文标题】如何判断 UITableView 动画何时完成?【英文标题】:How can I tell When a UITableView animation has finished? 【发布时间】:2011-08-26 00:02:50 【问题描述】:

如何判断 [UITableView setEditing:YES animated:YES] 何时完成?

我不想提供任何上下文,因为我想避免任何人给我提供我不感兴趣的解决方法。

我想要的是调用上面的,然后在动画完成时调用一个单独的函数。


我编辑了帖子以提供上下文和一些解决方法。 本来我setEditing,马上重新加载表格数据。

[tableView setEditing:YES animated:YES];
[tableView reloadData];

问题是表格在动画开始之前重新加载,所以动画永远看不到。

这里有一些不同的解决方法:

[tableView setEditing:YES animated:YES];
[self performSelector:@selector(ReloadTable) withObject:nil afterDelay:1.0];

这可行,但如果我得到不正确的延迟,那么它看起来很糟糕。所以我需要知道延迟是什么,我可以弄清楚,但我们不能保证延迟总是一样的。

isEditing = YES;
[tableView reloadData];
[tableView setEditing:YES animated:YES];

这可以工作,但表格的行为会有所不同,具体取决于我们是否处于编辑模式。所以我必须使用我自己的 isEditing 变量而不是标准的 UITableView.editing。我宁愿不必创建一个新的布尔 isEditing 变量。

[tableView setEditing:YES animated:YES];
[tableView insertRowsAtIndexPaths:path withRowAnimation:UITableViewRowAnimationTop];

这几乎可以正常工作,但在编辑模式下,第一行应该有 UITableViewCellEditingStyleInsert,而其他行则获得 UITableViewCellEditingStyleDelete。使用上面的代码,在添加行之前设置编辑样式。因此第二行以 UITableViewCellEditingStyleInsert 结束。

【问题讨论】:

【参考方案1】:
[CATransaction begin];
[CATransaction setCompletionBlock: ^
    // your animation has finished
];
[tableView setEditing:YES animated:YES];
[CATransaction commit];

注意setCompletionBlock必须在顶部。

【讨论】:

我在其他线程上尝试了很多关于这个问题的建议,这是第一个成功的! 这正是我想要的!谢谢!【参考方案2】:

ios 4 中,您可以执行以下操作:

[UIView animateWithDuration:0.3f
                 animations:^
                     [self.tableView setEditing:YES animated:NO];
                  
                 completion:^(BOOL finished)
                     // Do something
                 
];

【讨论】:

这很好用 (+1),但另一个答案中的 CATransaction 建议效果更好。 这取决于 Apple 为动画选择的时间。如果他们在未来的版本中更改时间,那么这将不再有效。请参阅接受的答案以获得更好的方法。【参考方案3】:

Swift 4 接受答案的版本:

CATransaction.begin()
CATransaction.setCompletionBlock 
    // your animation has finished

tableView.setEditing(true, animated: true)
CATransaction.commit()

【讨论】:

以上是关于如何判断 UITableView 动画何时完成?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断何时点击了 UITableView 部分索引字母?

如何检测 UINavigationController 动画何时完成?

如何可靠地确定 UICollectionView 布局何时完成动画

如何知道 UIView 动画何时全部完成

如何判断 FB.init() 何时完成?如何判断用户何时未连接应用程序启动?

writeToFile 如何判断何时完成