在滚动时取消UITableView中的动画

时间:2012-10-09 19:28:50

标签: ios uitableview

我有点困惑,没有太多可以转向。我有一个iOS应用程序,它从服务器获取消息并将其填充到UITableView中的单元格中。每次从服务器更新某个对象时,更新都会触发单元格动画。在我们的例子中,我们在游戏中有一个得分表。如果有人失去了一个点,他们的细胞会闪红,如果他们获得了一个点,他们的细胞会闪烁绿色。简单的概念,运作良好,我们的用户喜欢反馈。他们不喜欢的是当他们滚动时他们看到细胞有随机颜色与它相关并在那里停留大约一秒钟。我认为它与细胞的回收方式有关。我尝试了关于这个问题的各种检查,检查单元格是否具有相同的值,手动将颜色设置为白色等等,并且这些方法不起作用。

总而言之,我只想在单元格处于视图中时显示动画,而不是在用户滚动UITableView时显示动画。任何人有任何建议或想法?

由于

2 个答案:

答案 0 :(得分:2)

发生了什么

由于表视图重用了它们的单元格,因此即使它们不应该重复使用闪存的重用单元格也是如此。

如何解决

您可以在自定义表格视图单元格的preprareForReuse:tableView:willDisplayCell:forRowAtIndexPath:委托方法中将已重复使用的单元格恢复为默认状态(如提及的ACB)。

由于您使用UIView动画制作动画,因此您只需更改动画属性的值即可取消动画并返回默认状态。

如果你有闪光灯的用户核心动画

如果动画是使用Core Animation完成的,那么您将在动画层上调用removeAllAnimations。 (对于闪烁动画,您可能不会更改图层上的属性,而是告诉动画自动反转。这意味着删除动画会将颜色更改回原始值。)

答案 1 :(得分:0)

一个选项是删除动画并将willDisplayCell委托方法中的颜色重置为默认颜色。如果这不起作用,您可以按如下方式设置dequeueReusableCellWithIdentifier

NSString *aCellIdentifier = [NSString stringWithFormat:@"%d",indexPath.row];
UITableViewCell *aCell = [tableView dequeueReusableCellWithIdentifier:aCellIdentifier];     

但是,如果要显示大量数据,这将是一个问题,因为它会产生内存问题。请注意,在这种情况下,您不会重复使用表格单元格。