我希望在iPhone应用程序中的表视图中淡出单元格,然后它就会消失。当它即将出现时,我使用
- (void) tableView: (UITableView *) tableView
willDisplayCell: (UITableViewCell *) cell
forRowAtIndexPath: (NSIndexPath *) indexPath
用0.3秒动画将alpha从零改为1。
我想要一样,但是当它即将消失时从1到0。是否有类似于上述方法的任何方法或我还能如何做到这一点?
我不想使用标准iOS UITableViewRowAnimationFade
,因为在重新加载表格时我不想要任何其他转换。
修改 我正在重新加载表视图的内容。假设我有一个单击的按钮,它会重新加载我表格中的数据。那时我想淡出现有的细胞并淡化新细胞。
我使用的控制器是实施UIViewController
UITableViewDataSource
UITableViewDelegate
协议的基本UIScrollViewDelegate
。
答案 0 :(得分:2)
我找到了解决方案。
在致电[self.tableView reloadData]
之前,我正在动画所有可见的细胞淡出。我得到所有可见的单元格并通过
for (NSIndexPath *indexPath in [self.tableView indexPathsForVisibleRows])
{
// here I animate cells to fade out
}
(感谢@AlexKoren向我展示了迭代可见细胞的方法)。
因为我使用[self.tableView reloadData]
而没有任何额外的iOS内置动画,所以单元格正在消失。所以现在它们首先消失,然后我的新细胞逐渐消失在
- (void) tableView: (UITableView *) tableView
willDisplayCell: (UITableViewCell *) cell
forRowAtIndexPath: (NSIndexPath *) indexPath
重要:动画完成后我正在重新加载表视图。如果我在迭代单元格后调用[self.tableView reloadData]
,它会在显示动画之前重新加载表。因为我知道完成动画需要多长时间才能使用
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void)
{
[self.tableView reloadData];
});
以前计算过delay
。
答案 1 :(得分:0)
你试过这个吗?
- (void)tableView:(UITableView *)tableView
didEndDisplayingCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
我认为这就是你想要的。