2011-04-12 255 views
3

我的目标是让一个UITableViewCell滑过屏幕的一侧(如Twitter),然后从另一侧滑回。我能够让单元格滑出屏幕右侧,但我似乎无法弄清楚如何从左后角将它滑回屏幕上。这里是我的代码滑动它的权利:幻灯片UITableViewCell

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"]; 

感谢您的任何帮助!

回答

6

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

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

然后在新的细胞幻灯:

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

beginUpdates/endUpdates方法使动画进行批处理并一次全部执行。

谨防两两件事:

  1. 随着大量表中的数据,插入可能需要较长的时间(expecially如果你基本上是更换整个表)。在这种情况下调用[tableView reloadData]效果更好,但deleteRowsAtIndexPath:withRowAnimation:仍然可以用于很好的视觉效果。

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

+0

这对我而言不起作用(请参阅我对XJones的回答的评论)。我真正需要的是一种与我的问题相反的方式。 – edc1591 2011-04-12 20:56:15

+0

我使用了我所描述的技术来为自定义表格单元格进行动画处理,以了解它的价值。祝你好运! – 2011-04-12 21:02:17

2

你想要的行为应该通过动画细胞的子视图来完成,而不是细胞本身。牢房应该留在桌子上。在contentArea中创建一个包含所需子视图的自定义单元格,然后根据需要将其打开/关闭。

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

+0

我实际上必须为实际的单元格而不是视图设置动画,因为这是针对越狱设备的MobileSubstrate调整。我在MobileMusicPlayer应用程序的单元格中执行此操作,他们使用自定义的UITableViewCell实现自定义的UIView作为内容视图,并且我无法访问这些视图。因此,创建自定义单元格也不是一种选择。 – edc1591 2011-04-12 20:21:27

+0

我会接受你的话。一般来说,如果你有权访问单元格,那么你可以访问contentView属性(不管单元格的超类是什么)并且可以是动画的。动画实际的细胞可能会导致不可预知的副作用/行为。希望你得到它的工作。 – XJones 2011-04-12 20:24:21

+0

在单元格中调用'contentView'返回nil。显然,MobileMusicPlayer中的单元不是空的。苹果公司并没有在他们的自定义单元中放置一个属性来访问内容视图。 – edc1591 2011-04-12 20:25:48