我想实现扩展UITableViewCells
我完全控制从折叠到展开和返回的过渡动画。 我有一个数组,cellDataList
,持有的我UITableViewCells
的状态,即height
,color
,data
,isExpanded
等更多控制更新UITableView和UITableViewCell
我实现:
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath == selectedIndex)
return expandedHeight;
return collapsedHeight;
}
和我实现:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
/*
some logic that tests if the indexPath is already selected,
which will collapse the cell, if a previous cell needs to be collapsed before the
new expands etc.
*/
[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationNone];
[tableView endUpdates];
}
我的手机是一个自定义UITableViewCell
我在那里建立我的内容drawRect:
cell有一个UIView
(背景),用作单元格的自定义背景,我希望这个视图可以
将动画从折叠到展开和返回,而不仅仅是一个“跳跃”中的setFrame,就像现在一样。
我真的不知道在哪里'截取'tableView更新链,来实现这一点。
当我做了上面的[tableView beginUpdates] - [tableView endUpdates]
,它开始变得模糊不清。 我认为
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
被称为更新细胞 在指定的索引。这又会询问heightForCellAtIndexPath
哪个高度来设置单元格。如果我在定制单元设置一个断点setFrame:
方法 我可以看到来电是
[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:]().
此设置单元格的新帧,那么我想[cell setNeedsDisplay]
以某种方式调用,所以电池可以使所提供的框架。 [cell setNeedsDisplay]
最终会调用我的自定义drawRect:
并呈现单元格的内容。这个按预期工作,但我不知道在哪里以及如何为我的背景设置动画框架,也是以某种方式进行动画,所以只有在单击时才会完成,并且不是每次调用setFrame:
(在滚动等过程中)。 当我做了上面的tableView动画,为新的单元格大小腾出空间,这是我想用我的单元格上的背景视图“模仿”这个动画的 。
我在Tweetbot和路径等应用程序中看到了这种效果,但似乎无法复制它。
希望有人可以帮助我在正确的方向,谢谢:)
感谢你,真的很短的版本是“有没有一种方法来创建一个uitableviewcells高度的动画,这样它就可以与uitableviews动画同步,在它旁边移动,为一个新大小的单元腾出空间”。你提供的代码在哪里去?控制器,customcell或tableview? – RickiG 2011-06-12 09:07:23
你应该在tableView中动态改变你的单元格的高度,但是之后你需要重新加载你的表格。尝试调试您的代码以检查它是否涉及到您的新高度值。但是,一旦不改变这一点,你就编写自定义单元格。在您的控制器部件中,访问您的自定义单元并更改其高度,然后重新加载表格。 – 2011-06-12 11:05:12