滑动UITableViewCell

时间:2011-04-12 19:54:27

标签: objective-c cocoa-touch ios uitableview core-animation

我的目标是在屏幕的一侧(例如在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"];

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

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

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

然后在新单元格中滑动:

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

beginUpdates/endUpdates方法会导致动画被批量处理并立即执行。

小心两件事:

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

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

答案 1 :(得分:2)

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

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