在UITableViewCell视图中设置动画和更改视图

时间:2013-04-11 12:31:13

标签: ios xcode uitableview core-animation

假设我已将UITableViewCell子类化,并且我有一些观点(例如UILabel)。

表格已呈现。 现在我想更改/动画该视图。

|                       |         |                       |
|-----------------------|         |-----------------------|
|      label alpha=1.0  | animate |      label alpha=0.5  | 
|-----------------------|  ===>   |-----------------------|
|      label alpha=1.0  |         |      label alpha=0.5  |
|-----------------------|         |-----------------------|
|                       |         |                       |

我认为cellForRowAtIndexPathwillDisplayCelldidEndDisplayingCell现在不是好选择。

我在子类animateTest中创建了一个方法UITableViewCell,它改变了标签的样式 - 例如颜色或执行一些动画。

现在在视图控制器中渲染表我试图在tableview子视图上执行快速计算。 感谢枚举,我抓住了所有子类UITableViewCell个实例,并使用了performSelector来激活animateTest方法。 但没有变化。即使做[tableview reloadData]

在呈现表格后,如何在表格单元格中设置动画? (使用[UIView animateWithDuration.........])?

提前致谢。

1 个答案:

答案 0 :(得分:2)

实际上由于错误的单元初始化没有发生任何事情。

我以前用以下方式初始化了单元格:

NSString *cellIdentifier = [NSString stringWithFormat:@"Cell%d", [indexPath section]];

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
NSArray *topLevelObjects;
topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil];

    for(id currentObject in topLevelObjects)
    {
        if([currentObject isKindOfClass:[CustomCell class]])
        {
            cell = (CustomCell *)currentObject;
            break;
        }
    }

现在我以这种方式初始化单元格:

static NSString *reuseIdentifier = @"Cell";

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];

if (cell == nil) {
  cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil] objectAtIndex:0];
}

使用以下方法一切正常:

CustomCell *cell = (CustomCell*)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:3]];
[UIView animateWithDuration:2 animations:^{
    cell.element.alpha = 0;
}];

如果有人能够解释第一种方式的错误,我将不胜感激。 我怀疑单元格在初始化时以某种方式重置,因此我的更改不可见,因为旧单元格(应用了动画)被丢弃并且单元格再次生成。

我前段时间从某个网站复制过片段,所以我习惯使用它,但显然这不是一个好的实现。