如何为UITableViewCell颜色设置动画?

时间:2013-02-04 14:47:24

标签: ios uitableview uikit uiviewanimation

我希望允许用户在应用程序中的几个调色板之间切换,IE如何使用XCode和其他文本编辑器在浅色和深色背景之间切换。我能够完成所有这些,但现在我正在尝试将更改包装在一个简单的动画块中,以便颜色变化淡入。除了我的表视图单元格外,一切都很好。颜色会发生变化,但它们不会生成动画。

[UIView animateWithDuration:0.5 animations:^{
    self.tableView.backgroundColor = [UIColor whiteColor];

    for (UITableViewCell *cell in self.tableView.visibleCells)
    {
        cell.textLabel.textColor = [UIColor blueColor];
    }
}];

我试图不重新加载整个表格,因为这将导致很多事情再次布局,我不想要。坦率地说,我已经尝试了几次,但无论如何都不行。

对于它的价值,我的UITableView被分组,但我认为这并没有真正影响我的解决方案。

这里列出的答案很有意思,但我不认为与我的问题有关 - 我正在改变从不动画的文字颜色:Animating UITableViewCell's backgroundColor in block animation

2 个答案:

答案 0 :(得分:0)

问题是文本属性不可动画。为了给您的更改添加动画效果,我建议您在表格单元格contentView中添加自定义视图,而不是使用视图过渡动画来交换旧视图(使用新颜色设置)。这意味着为您放入contentView的视图做自己的布局,因为您不再使用其中一种预定义的样式。

请参阅此处的文档:http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/tableview_iphone/TableViewCells/TableViewCells.html

答案 1 :(得分:0)

谢谢你们,@ shadowhorst链接真的很有帮助。通过使用交叉溶解转换而不是animateWithDuration方法,我能够完成我想要的任务。代码如下 -

[UIView transitionWithView:self.tableView
                  duration:0.25
                   options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowAnimatedContent
                animations:^{
                    self.tableView.backgroundColor = [UIColor whiteColor];;

                    for (UITableViewCell *cell in self.tableView.visibleCells)
                    {
                        cell.textLabel.textColor = [UIColor blueColor];
                    }
                }
                completion:nil];

我注意到我的分组单元格的边缘周围仍然存在一些瑕疵,这就是我将动画的持续时间缩短到四分之一秒的原因。