滑动 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的主要内容,如果未能解决你的问题,请参考以下文章