0

所以,我从 UITableView 实例中得到了一个 CALayer。我首先想设置几个属性,例如 backgroundColor。之后我添加了一个动画,它应该使重新加载(-reloadData)看起来更好。但是,我添加的 CATransition 也会为我之前设置的 backgroundColor 设置动画。我想我在这里遗漏了一些真正的基本知识,但我真的不明白。

这是我的代码:

    self.superview.backgroundColor = [UIColor greenColor];
    self.backgroundColor = nil;
    self.backgroundView.backgroundColor = nil;

我希望 UITableView 立即变为绿色。

这是过渡:

CATransition* swapAnimation = [CATransition animation];
            swapAnimation.type = kCATransitionPush;
            swapAnimation.subtype = kCATransitionTypeFromUITableViewRowAnimation(animation);
            swapAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
            swapAnimation.fillMode = kCAFillModeBoth;
            swapAnimation.duration = 5.0f;
            swapAnimation.removedOnCompletion = YES;
            [self.layer addAnimation:swapAnimation forKey:@"UITableViewReloadDataAnimationKey"];

当我运行它时,UITableView 保持其原始背景颜色,绿色(实际上通过现在透明的 UITableView 发光)从顶部/底部与单元格一起滑入。这是一个解释 self.layer 调用的类别的代码。

4

1 回答 1

2

看起来您需要将背景颜色设置器包装在一个显式的CATransaction中,因为在添加动画之前它不会被刷新。

像这样:

[CATransaction begin];
// set background
[CATransaction flush];
[CATransaction commit];
于 2012-11-07T06:54:43.960 回答