CALayer addAnimation:forKey:动画之前设置的每个属性

时间:2012-11-06 21:04:07

标签: cocoa-touch core-animation calayer catransition

所以,我从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保持其原始的backgroundColor,绿色(实际上通过现在透明的UITableView闪烁)从顶部/底部滑入单元格。 它是解释self.layer调用的类别中的代码。

1 个答案:

答案 0 :(得分:2)

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

像这样:

[CATransaction begin];
// set background
[CATransaction flush];
[CATransaction commit];