gpt4 book ai didi

objective-c - 你能为 UITableView 单元格插入做自定义动画吗?

转载 作者:太空狗 更新时间:2023-10-30 03:09:49 28 4
gpt4 key购买 nike

我有一个由 NSFetchedResultsController 填充的 UITableView。

在表格的初始加载时,我希望单元格在其中具有动画效果,但我想做更多的自定义动画

[tableView insertRowsAtIndexPaths:withRowAnimation:];

允许。具体来说,我想放慢动画速度并让它们以特定方式从侧面飞入。我无法通过 UITableViewRowAnimation 常量实现这一点。有没有一种方法可以使用 Core Animation 来完全按照我的意愿去做,或者我是否需要在这个特定实例中坚持使用 UIKit 动画?

感谢您的帮助!

乔尔

最佳答案

最新解决方案 (2017-12-12)

添加 Swift 4.0 版本的 animate 方法。然后应按照与以下解决方案相同的方式实现:

func animate() {
for cell in self.tableView.visibleCells {
cell.frame = CGRect(x: self.tableView.frame.size.width, y: cell.frame.origin.y, width: cell.frame.size.width, height: cell.frame.size.height)
UIView.animate(withDuration: 1.0) {
cell.frame = CGRect(x: 0, y: cell.frame.origin.y, width: cell.frame.size.width, height: cell.frame.size.height)
}
}
}

更新的解决方案 (2015-09-05)

添加 animate 方法的 Swift 2.0 版本。然后应按照与以下解决方案相同的方式实现:

func animate() {
for cell in self.tableView.visibleCells {
cell.frame = CGRectMake(320, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)
UIView.animateWithDuration(1.0) {
cell.frame = CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)
}
}
}

新解决方案 (2014-09-28)

我对解决方案做了一些修改,使实现更容易,并使其适用于 iOS8。您需要做的就是在您的 TableViewController 中添加此 animate 方法,并在您希望它动画时调用它(例如,在您的 reload 方法中,但您可以随时调用它):

- (void)animate
{
[[self.tableView visibleCells] enumerateObjectsUsingBlock:^(UITableViewCell *cell, NSUInteger idx, BOOL *stop) {
[cell setFrame:CGRectMake(320, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
[UIView animateWithDuration:1 animations:^{
[cell setFrame:CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
}];
}];
}

再次,按照您喜欢的方式更改动画。此特定代码将以较慢的速度从右侧为单元格设置动画。

旧解决方案 (2013-06-06)

您可以通过实现自己的 UITableView 并覆盖 insertRowsAtIndexPaths 方法来实现这一点。这是一个示例,说明单元格将从右侧真正缓慢地被插入的位置(1 秒动画):

- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
{
for (NSIndexPath *indexPath in indexPaths)
{
UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath];
[cell setFrame:CGRectMake(320, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];

[UIView beginAnimations:NULL context:nil];
[UIView setAnimationDuration:1];
[cell setFrame:CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
[UIView commitAnimations];
}
}

您可以自己尝试动画。 TableView 不会自动调用此方法,因此您必须覆盖 TableView 委托(delegate)中的 reloadData 方法并自己调用此方法。

评论

reloadData 方法应该看起来像这样:

- (void)reloadData
{
[super reloadData];
NSMutableArray *indexPaths = [[NSMutableArray alloc] init];
for (int i = 0; i < [_data count]; i++)
[indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
[self insertRowsAtIndexPaths:indexPaths withRowAnimation:0];
}

关于objective-c - 你能为 UITableView 单元格插入做自定义动画吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11379614/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com