目前,我正在开发一个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
,但是在闪存之后不会立即恢复突出显示的状态,除非我编写了大量令人讨厌的容易出错的代码,以防止它分崩离析。此外,我无法控制动画本身。
有没有办法在附件视图中保留旧动画效果,还是我必须使用高亮方法开始制作闪光灯?
最诚挚的问候, 克里斯
答案 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!
克里斯