使用accessoryView为UITableViewCell的backgroundColor设置动画

时间:2012-05-24 09:55:09

标签: ios uitableview core-animation

目前,我正在开发一个UITableViewController。在其UITableView的单元格中,它提供来自Web服务的实时数据。当其中一个基础数据项更新时(每两分钟左右一次),我希望单元格能够短暂“闪烁”,以便用户理解该单元格的数据刚刚更新。

到目前为止,我使用了这段代码:

[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionCurveEaseInOut animations:^
{
    cell.contentView.backgroundColor = flashColor;
} completion:^(BOOL finished)
{
    [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionCurveEaseInOut animations:^
    {
        cell.contentView.backgroundColor = [UIColor clearColor];
    } completion: NULL];
}];

这很有效,直到我想为用户提供一种“查看”给定单元格的数据并添加了Disclosure Indicators的方法。由于框架缩小了内容区域以便为Disclosure Indicator腾出空间,现在flash只突出显示单元格的左侧90%,但Disclosure Indicator的背景颜色不会改变。

cell.accessoryView.backgroundColor = flashColor;

cell.backgroundView.backgroundColor = flashColor;

无助于修复动画。

我已经阅读了- (void) setHighlighted: (BOOL)highlighted animated: (BOOL)animated,但是在闪存之后不会立即恢复突出显示的状态,除非我编写了大量令人讨厌的容易出错的代码,以防止它分崩离析。此外,我无法控制动画本身。

有没有办法在附件视图中保留旧动画效果,还是我必须使用高亮方法开始制作闪光灯?

最诚挚的问候, 克里斯

1 个答案:

答案 0 :(得分:6)

[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionCurveEaseInOut animations:^
{
    [cell setHighlighted:YES animated:YES];
} completion:^(BOOL finished)
{
    [UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionCurveEaseInOut animations:^
    {
        [cell setHighlighted:NO animated:YES];
    } completion: NULL];
}];

请注意,单元格将忽略animateWithDuration参数中设置的时间,并始终使用默认值为0.2秒的iOS。因此,最好将该参数设置为0.2。

解决方案很简单,但当然无法保留原始动画(快速突出显示和慢速淡出)。另一方面,这可能是更加保守和面向未来的方法。

感谢DavidRönnqvist!

克里斯