9

为什么这个 CATransaction 的完成块永远不会触发?

[CATransaction begin];
[CATransaction setCompletionBlock:^{
    // table animation has finished
    NSLog(@"why does this section never execute?");
}];
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:self.currentFeedItems.count inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
[CATransaction commit];

表格视图动画有效,但从不执行完成块。苹果文档说完成块保证执行。

4

1 回答 1

16

哦,男孩,这太模糊了,我真的很惊讶我发现了这个问题。

正在重新加载的单元格包含一个 UIActivityIndi​​catorView,它运行良好。当单元格重新加载时,它会隐式重绘表格单元格,并且在表格单元格的该进程中发生 startAnimating 调用。startAnimating 调用以某种方式干扰了 CATransaction 完成块。

当我将 startAnimating 调用包装在 dispatch_async 块中时,问题就消失了:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.loadingInd startAnimating];
});
于 2014-12-14T17:01:16.513 回答