我的目标是在屏幕的一侧(例如在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"];
感谢您的帮助!
答案 0 :(得分:6)
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:
仍可用于获得良好的视觉效果。
您必须确保支持表格的实际数据会相应且正确地更改。也就是说,如果要从表中删除或插入行,那么提供表的数组(或其他任何内容)也必须正确反映每一步中表中的行数。
答案 1 :(得分:2)
您想要的行为应该通过设置单元格的子视图动画来完成,而不是单元格本身。细胞应该留在桌子上。在contentArea中创建一个包含所需子视图的自定义单元格,然后根据需要打开/关闭它们。
基于标准UIView块的动画也应该对此有用。