滑动 UITableViewCell

Posted

技术标签:

【中文标题】滑动 UITableViewCell【英文标题】:Slide UITableViewCell 【发布时间】:2011-04-12 19:54:26 【问题描述】:

我的目标是让UITableViewCell 从屏幕的一侧滑出(就像在 Twitter 中一样),然后从另一侧滑回。我能够使单元格从屏幕右侧滑出,但我似乎无法弄清楚如何让它从右侧滑回屏幕。这是我将其滑到右侧的代码:

UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath];
[cell.layer setAnchorPoint:CGPointMake(0, 0.5)];
[cell.layer setPosition:CGPointMake(cell.frame.size.width, cell.layer.position.y)];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.x"];
[animation setRemovedOnCompletion:NO];
[animation setDelegate:self];
[animation setDuration:0.14];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[cell.layer addAnimation:animation forKey:@"reveal"];

感谢您的帮助!

【问题讨论】:

【参考方案1】:

UITableView 提供插入和删除带有动画的行的方法,并为您处理所有动画。试试这样的:

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:myIndexPaths
                 withRowAnimation:UITableViewCellRowAnimationRight];
[tableView endUpdates];

然后滑入一个新的单元格:

[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:myNewIndexPaths
                 withRowAnimation:UITableViewCellRowAnimationLeft];
[tableView endUpdates];

beginUpdates/endUpdates 方法导致动画被批处理并一次执行。

注意两件事:

    对于大量表数据,插入可能需要很长时间(特别是如果您实质上要替换整个表)。在这种情况下调用[tableView reloadData] 效果更好,但deleteRowsAtIndexPath:withRowAnimation: 仍然可以用于获得漂亮的视觉效果。

    您必须确保支持您的表的实际数据相应地正确更改。也就是说,如果您要从表格中删除或插入行,那么为表格提供数据的数组(或其他)也必须正确反映每个步骤中表格中有多少行。

【讨论】:

这在我的情况下不起作用(请参阅我关于 XJones 的答案的 cmets)。我真正需要的是一种与我的问题相反的方法。 我使用我描述的技术来为自定义表格单元格设置动画,这是值得的。祝你好运!【参考方案2】:

您想要的行为应该通过动画单元格的子视图来完成,而不是单元格本身。单元格应留在表格中。在 contentArea 中创建一个包含您想要的子视图的自定义单元格,然后根据需要滑动这些子视图。

标准的基于 UIView 块的动画应该也适用于此。

【讨论】:

我实际上必须为实际单元格而不是视图设置动画,因为这是针对越狱设备的 MobileSubstrate 调整。我在 MobileMusicPlayer 应用程序中的单元格上执行此操作,他们使用自定义 UITableViewCell 将自定义 UIView 实现为内容视图,我无权访问这些视图。因此,创建自定义单元格也不是一种选择。 我相信你的话。通常,如果您可以访问单元格,那么您可以访问 contentView 属性(与单元格的超类无关)并且可以设置动画。对实际单元格进行动画处理可能最终会产生不可预测的副作用/行为。希望你能成功。 在单元格上调用 contentView 返回 nil。显然,MobileMusicPlayer 中的单元格不是空的。而且 Apple 并没有在他们的自定义单元格中放置一个属性来访问内容视图。 叔叔!当您超出“正常”的做事方式时,您就超出了我的专业知识范围。

以上是关于滑动 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB如何加入滑动条,并能让滑动条滑动且得到相应数值?(要求代码,画滑动条,得数值)

确定滑动事件是针对左滑动还是右滑动

滑动操作以及滑动方法封装

H5页面切换,左右滑动和上下滑动,哪种好?

appnium实现向上滑动,向下滑动,向左滑动,向右滑动

App页面滑动