1

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

总而言之,我试图仅在单元格处于视图中时才显示动画,而不是在用户滚动 UITableView 时显示动画。有人有什么建议或想法吗?

谢谢

4

2 回答 2

3

怎么了

由于表格视图重用了它们的单元格,因此您最终会重复使用正在闪烁的单元格,即使它们不应该。

如何解决

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

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

如果您有 Flash 的用户核心动画

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

于 2012-10-13T15:02:43.613 回答
0

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

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

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

于 2012-10-09T19:40:46.243 回答