我想在 iPhone 应用程序的表格 View 中的单元格消失之前使其淡出。当它即将出现时我使用
- (void) tableView: (UITableView *) tableView
willDisplayCell: (UITableViewCell *) cell
forRowAtIndexPath: (NSIndexPath *) indexPath
使用 0.3 秒的动画将 alpha 从 0 更改为 1。
我也想在它即将消失时从1到0。有没有与上面类似的方法或者我还能怎么做?
我不想使用标准 iOS UITableViewRowAnimationFade
因为我不想在重新加载表格时进行任何其他转换。
编辑: 我正在重新加载 TableView 的内容。假设我有一个按钮,单击它就会重新加载表中的数据。那是我想要淡出现有单元格并淡入新单元格的时候。
我使用的 Controller 是一个基本的UIViewController
,实现UITableViewDataSource
UITableViewDelegate
UIScrollViewDelegate
协议(protocol)。
最佳答案
我找到了解决方案。
就在调用[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
重要:我在动画完成后重新加载表格 View 。如果我在迭代单元格后调用 [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];
});
之前计算过延迟
。
关于ios - UITableViewDelegate 在 iOS 中是否有类似 tableViewWillEndDisplayingCell 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32229739/