所以,我从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调用的类别中的代码。
答案 0 :(得分:2)
看起来您需要将背景颜色设置器包装在显式CATransaction
中,因为在添加动画之前它不会被刷新。
像这样:
[CATransaction begin];
// set background
[CATransaction flush];
[CATransaction commit];