当我尝试设置view.layer.backgroundColor时,颜色会立即更改而不会生成动画。
但是,如果我创建一个CALayer,将其添加为view.layer的子图层,并更改该CALayer的backgroundColor,我可以看到隐式颜色更改动画。
任何人都可以解释为什么在更改view.layer.backgroundColor
时没有动画?
\\ add CALayer
self.colorLayer = [CALayer layer];
self.colorLayer.frame = CGRectMake(50.0f, 50.0f, 100.0f, 100.0f);
self.colorLayer.backgroundColor = [UIColor blueColor].CGColor;
[self.view.layer addSublayer:self.colorLayer];
\\change the color somewhere else
CGFloat red = arc4random() / (CGFloat)INT_MAX;
CGFloat green = arc4random() / (CGFloat)INT_MAX;
CGFloat blue = arc4random() / (CGFloat)INT_MAX;
self.colorLayer.backgroundColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0].CGColor; // can animate
self.view.layer.backgroundColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0].CGColor; // won't animate
答案 0 :(得分:4)
来自Core Animation Programming Guide:
由于iOS视图始终具有底层,因此UIView类本身直接从层对象派生其大部分数据。因此,您对图层所做的更改也会自动反映在视图对象中。此行为意味着您可以使用Core Animation或UIView接口进行更改。
如果要使用Core Animation类来启动动画,则必须从基于视图的动画块中发出所有Core Animation调用。
[CategoryId, DefectId, Image-Link]
类默认禁用图层动画,但会在动画块内重新启用它们。因此,您在动画块之外所做的任何更改都不会设置动画。
(强调补充。)
答案 1 :(得分:2)
原因是该图层是视图的基础层 。该图层没有隐式图层动画。只有(我们可以称之为)次要层的隐式层动画,即您自己添加的子层。