我如何等待,直到一个UITableView内置animation完成?
[self.tableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)] withRowAnimation:UITableViewRowAnimationLeft]; [self.tableView reloadRowsAtIndexPaths:@[ [NSIndexPath indexPathForItem:1 inSection:1]] withRowAnimation:UITableViewRowAnimationRight];
在上面的代码中,如何在第一行的animation完成后执行第二行?
我试过这个…
[self.tableView beginUpdates]; [self.tableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)] withRowAnimation:UITableViewRowAnimationLeft]; { [self.tableView beginUpdates]; [self.tableView reloadRowsAtIndexPaths:@[ [NSIndexPath indexPathForItem:1 inSection:1]] withRowAnimation:UITableViewRowAnimationRight]; [self.tableView endUpdates]; } [self.tableView endUpdates];
和这个…
[self.tableView beginUpdates]; { [self.tableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)] withRowAnimation:UITableViewRowAnimationLeft]; } [self.tableView endUpdates]; [self.tableView beginUpdates]; { [self.tableView reloadRowsAtIndexPaths:@[ [NSIndexPath indexPathForItem:1 inSection:1]] withRowAnimation:UITableViewRowAnimationRight]; }
…但是无论哪种方式,animation显然都是同时发生的(当animation慢时,这一点非常明显)。
谢谢Iducool指点我的另一个问题。
这工作…
[CATransaction begin]; [CATransaction setCompletionBlock:^{ [self.tableView reloadRowsAtIndexPaths:@[ [NSIndexPath indexPathForItem:1 inSection:1]] withRowAnimation:UITableViewRowAnimationRight]; }]; [self.tableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)] withRowAnimation:UITableViewRowAnimationLeft]; [CATransaction commit];
我似乎并不需要UITableView
的beginUpdates
和endUpdates
。