0

我想让用户在应用程序中的几个调色板之间切换,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 是分组的,尽管我认为这并没有真正影响我的解决方案。

此处列出的答案很有趣,但我认为与我的问题无关 - 我正在更改从不动画的文本颜色:动画 UITableViewCell's backgroundColor in block animation

4

2 回答 2

0

The problem is that text properties are not animatable. In order to animate your changes I would recommend adding a custom view in your table cell's contentView than you can use a view transition animation to swap the old view for the new one (with the new colours set). This will mean doing your own layout for the view you put into the contentView since you're not using one of the predefined styles any more.

See docs here: http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/tableview_iphone/TableViewCells/TableViewCells.html

于 2013-02-04T15:00:52.647 回答
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];

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

于 2013-02-04T15:18:29.890 回答