【问题标题】:How can I animate a UITableViewCell's colors?如何为 UITableViewCell 颜色设置动画?
【发布时间】:2013-02-04 14:47:24
【问题描述】:

我想让用户在应用程序中的几个调色板之间切换,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

【问题讨论】:

  • 我很确定文本颜色不是动画属性。表格视图背景颜色动画是否正确?
  • 这就解释了;是的,虽然我的圆形/分组单元格周围的边缘立即改变,但背景颜色的动画效果正确。是否有文档说 UILabel.textcolor 不可动画?
  • UIView Class Reference 中有一个“动画”部分概述了哪些属性可以被动画化。简而言之,如果它不是基础 UIView 属性,则无法对其进行动画处理

标签: ios uitableview uikit uiviewanimation


【解决方案1】:

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

在此处查看文档:http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/tableview_iphone/TableViewCells/TableViewCells.html

【讨论】:

    【解决方案2】:

    谢谢大家,@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];
    

    我确实注意到我的分组单元的边缘周围仍然存在一些伪影,这就是我将动画的持续时间降低到四分之一秒的原因。

    【讨论】:

    • 为什么不简单地用淡入淡出重新加载可见行? [tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] withRowAnimation: UITableViewRowAnimationFade];.
    • 我可以在表格视图的背景颜色的同时为这些行设置动画吗?
    • 可能不会。我错过了那个细节。我的建议只适用于行,而不适用于表格的背景。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多