gpt4 book ai didi

iphone - UITableViewCell 滚动时的动画

转载 作者:行者123 更新时间:2023-12-03 19:22:42 24 4
gpt4 key购买 nike

我已经实现了 Cocoa with Love 的 example for Multi-row selection其中涉及创建一个自定义 UITableViewCell,该 UITableViewCell 在layoutSubviews中启动动画以在每行左侧显示复选框,如下所示:

- (void)layoutSubviews
{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationBeginsFromCurrentState:YES];

[super layoutSubviews];

if (((UITableView *)self.superview).isEditing)
{
CGRect contentFrame = self.contentView.frame;
contentFrame.origin.x = EDITING_HORIZONTAL_OFFSET;
self.contentView.frame = contentFrame;
}
else
{
CGRect contentFrame = self.contentView.frame;
contentFrame.origin.x = 0;
self.contentView.frame = contentFrame;
}

[UIView commitAnimations];
}

这工作正常,并且出于所有意图和目的,我的 UITableView 表现得像它应该的那样。然而,我遇到了一个小的美学问题:当滚动之前未显示的 UITableView 行时,将启动其滑动动画,这意味着某些行在进入 View 时动画是交错的。

这是可以理解的,因为 setAnimationBeginsFromCurrentState 已设置为 YES,并且 UITableView 中更下方的行尚未更新其帧位置。为了解决这个问题,我尝试使用 willDisplayCell 来覆盖 UITableView 处于编辑模式时变得可见的单元格的动画。本质上绕过动画并立即更新行框架,以便使其看起来好像单元格已经动画到位,如下所示:

/*
Since we animate the editing transitions, we need to ensure that all animations are cancelled
when a cell is scheduled to appear, so that things happen instantly.
*/
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
[cell.contentView.layer removeAllAnimations];

if(tableView.isEditing) {
CGRect contentFrame = cell.contentView.frame;
contentFrame.origin.x = EDITING_HORIZONTAL_OFFSET;
cell.contentView.frame = contentFrame;
} else {
CGRect contentFrame = cell.contentView.frame;
contentFrame.origin.x = 0;
cell.contentView.frame = contentFrame;
}
}

不幸的是,这似乎没有任何效果。有人知道如何解决这个问题吗?

最佳答案

不确定您是否仍然需要这个问题的答案,但我刚刚遇到了完全相同的问题,所以我想我会分享我的解决方案。我按照您提到的 Cocoa with Love 博客文章中描述的方式实现了多重选择。

在 cellAtIndexPath DataSource 方法中,当我创建一个新单元格时(如果该单元格已经在可重用单元格队列中),我会检查 tableView 是否处于编辑模式,如果是,我会在单元格上设置一个属性(我使用 EnableAnimation 属性创建了我自己的自定义单元格)为 false,因此当它获取 SetEditing 回调时,它不会为单元格设置动画,而只会设置框架。在 Cell 类的构造函数中,我将 EnableAnimation 设置为 true,当调用 SetEditing 回调时,我将 EnableAnimation 设置为传入的 animate 参数。我希望这会有所帮助。

关于iphone - UITableViewCell 滚动时的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4281567/

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