如何在UITableView的加载中为行设置动画?

时间:2012-08-17 18:27:59

标签: ios animation uitableview uiviewanimation

我想使用UITableViewRowAnimation:reloadData。

在我使用该示例进行表加载之前(我发现在某些ios开发指南中):

for (NSDictionary *entry in [dl reverseObjectEnumerator]) {
        int insertIdx = 0;

        [_allEntries insertObject:entry atIndex:insertIdx];
        [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:insertIdx inSection:0]]
                              withRowAnimation:UITableViewRowAnimationRight];

    }   

但是这种方式在大数据上看起来似乎很慢,那么如何使用动画快速加载tableviews呢?

2 个答案:

答案 0 :(得分:1)

您应该查看beginUpdatesendUpdates。在这两个命令中,您可以更新/删除/插入行并为其设置动画。它比使用reloadData更有效率。

有关此主题的更多信息,请访问:http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html

快速摘录:

  
      
  • (无效)beginUpdates
  •   
     

如果您想要后续插入,删除和,请调用此方法   选择操作(例如,cellForRowAtIndexPath:和   indexPathsForVisibleRows)同时进行动画处理。这一组   方法必须以调用endUpdates结束。这些方法   对可以嵌套。如果您不进行插入,删除和   选择调用此块内部,表属性如行计数   可能会变得无效。你不应该在组内调用reloadData;   如果您在组内调用此方法,则需要执行任何操作   自己制作动画。

答案 1 :(得分:0)

Wasabii是对的,但在你的情况下你可以累积数组中的所有索引,然后使用一个插入命令更新表:

NSMutableArray *indexes = [NSMutableArray arrayWithCapacity:5];

for (NSDictionary *entry in [dl reverseObjectEnumerator])
{
    int insertIdx = 0;

    [_allEntries insertObject:entry atIndex:insertIdx];
    [indexes addObject:[NSIndexPath indexPathForRow:insertIdx inSection:0]];
}

// insert rows into table
[self.tableView insertRowsAtIndexPaths:indexes withRowAnimation:UITableViewRowAnimationRight];