UITableView 滚动时动画单元格

Posted

技术标签:

【中文标题】UITableView 滚动时动画单元格【英文标题】:Animating cells while UITableView is scrolling 【发布时间】:2012-02-28 18:02:55 【问题描述】:

我正在尝试实现一种效果,其中当 tableview 滚动时,当前可见的单元格将根据它们在屏幕上的位置进行动画处理。我对 ios 开发人员有点陌生,所以让我试着分解一下:

使用自定义单元格加载 Tableview 用户开始滚动而 表在运动中,可见单元格有一个 UIView,我会在其中 喜欢执行直接对应于单元格的动画 屏幕上的当前 Y 位置。 单元格只有在 可见 单元格动画直接对应桌子运动,即 每当表格视图滚动时,单元格都会动画;一旦 桌子停止,动画暂停

我想到的一个解决方案是在 tableview 移动时更新 drawRect 每一帧。根据图形操作,这可能是可怕的性能明智。有没有办法在每次更改时获取当前表位置?我会更适合使用核心动画吗?

【问题讨论】:

【参考方案1】:

如果您想实现以下目标,这可能会有所帮助: https://github.com/mrugrajsinh/AnimatedTableViewCellDemo

【讨论】:

不错的工作 mrug 但无法正常工作的预期功能,即 jurk 和一些时间完成的动画不适用于矩形单元格大小【参考方案2】:

让你的视图控制器成为 UITableView 的代理,并使用滚动视图代理的所有方法。那里有许多用于开始滚动和结束滚动的控件,并且在 thpse 控件中,您可以检查 uitableview 单元格的定位。

【讨论】:

正是我想要的,谢谢。我认为必须有一个框架 API 才能实现这一点,谢谢。【参考方案3】:

你必须成为这个的代表:https://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UITableViewDelegate_Protocol/Reference/Reference.html

这是覆盖和动画单元格的方法:

– tableView:willDisplayCell:forRowAtIndexPath:

【讨论】:

我很确定这还不够。它只会在单元格变得可见时通知您,而不会告诉您它将在哪里显示。 你是对的。但是,如果您成为滚动视图协议 :scrollViewDidScroll: 方法的委托,然后从 TableView 获取 indexPathsForVisibleRows 并为这些行设置动画,该怎么办。当然,您必须跟踪您开始制作动画的单元格和未制作动画的单元格。无论如何,也许它仍然是一个更清洁的解决方案

以上是关于UITableView 滚动时动画单元格的主要内容,如果未能解决你的问题,请参考以下文章

单元格中的 UITableView 动画导致平滑滚动中断

UITableView 动画在部分之间滚动,同时临时删除过多的单元格以简化动画

iOS UITableView在过滤时滚动插入

iOS11 中奇怪的 uitableview 行为。单元格通过导航推送动画向上滚动

在 UICollectionView/UITableView 中为滚动视图的偏移设置动画会导致单元格过早消失

将 UITableView 单元格滚动到表格边界之外