Objective c 幻灯片UITableViewCell

Objective c 幻灯片UITableViewCell,objective-c,cocoa-touch,ios,uitableview,core-animation,Objective C,Cocoa Touch,Ios,Uitableview,Core Animation,我的目标是让一个UITableViewCell从屏幕的一侧滑出(就像在Twitter中一样),然后从另一侧滑回屏幕。我可以让手机从屏幕上滑到右边,但我似乎不知道如何让它在之后从左边滑回到屏幕上。下面是我将其滑到右侧的代码: UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath]; [cell.layer setAnchorPoint:CGPointMake(0, 0.5)]; [cell.layer setPosition:C

我的目标是让一个
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"];

谢谢你的帮助

您想要的行为应该通过设置单元子视图的动画来完成,而不是单元本身。单元格应保持在表中的适当位置。在contentArea中创建包含所需子视图的自定义单元格,然后根据需要打开/关闭这些子视图


标准的基于UIView块的动画也可以很好地实现这一点。

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:
    仍然可以获得良好的视觉效果

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


  • 实际上,我必须为实际的单元格设置动画,而不是视图,因为这是针对越狱设备的MobileSubstrate调整。我在MobileMusicPlayer应用程序中的单元格上执行此操作,它们使用自定义UITableViewCell,实现自定义UIView作为内容视图,我无权访问这些视图。所以,创建自定义单元格也不是一个选项。我相信你的话。通常,如果您有权访问单元格,则可以访问contentView属性(无论单元格的超类是什么),并且可以设置动画。为实际单元格设置动画可能会产生不可预测的副作用/行为。希望您能让它正常工作。在单元格上调用
    contentView
    返回零。显然,MobileMusicPlayer中的单元格不是空的。苹果没有在他们的自定义单元格中放置属性来访问内容视图。叔叔!当你脱离了“正常”的做事方式时,你就超出了我的专业范围。这在我的情况下是行不通的(见我对XJones答案的评论)。我真正需要的是一种与我的问题相反的方法。我使用了我描述的技术来设置自定义表格单元格的进出动画,这是值得的。祝你好运