Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么view.layer.backgroundColor=randomColor赢得';你不能设置颜色变化的动画吗?_Ios_Animation_Core Animation_Calayer - Fatal编程技术网

Ios 为什么view.layer.backgroundColor=randomColor赢得';你不能设置颜色变化的动画吗?

Ios 为什么view.layer.backgroundColor=randomColor赢得';你不能设置颜色变化的动画吗?,ios,animation,core-animation,calayer,Ios,Animation,Core Animation,Calayer,当我尝试设置view.layer.backgroundColor时,颜色会立即更改,而不会出现动画。 但是如果我创建一个CALayer,将其添加为view.layer的子层,并更改该CALayer的背景色,我可以看到隐式的颜色更改动画。 有人能解释一下为什么在更改view.layer.backgroundColor时没有动画吗 \\ add CALayer self.colorLayer = [CALayer layer]; self.colorLayer.frame = CGRectMake(

当我尝试设置view.layer.backgroundColor时,颜色会立即更改,而不会出现动画。 但是如果我创建一个CALayer,将其添加为view.layer的子层,并更改该CALayer的背景色,我可以看到隐式的颜色更改动画。 有人能解释一下为什么在更改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

原因是该层是视图的底层。该层没有隐式层动画。隐式层动画仅适用于(我们可能称之为)次级层,即您自己添加的子层。

原因是该层是视图的底层。该层没有隐式层动画。隐式层动画仅适用于(我们可能称之为)次级层,即您自己添加的子层。

来源:

因为iOS视图总是有一个底层,所以UIView类本身直接从层对象派生其大部分数据。因此,对图层所做的更改也会自动反映在视图对象中。此行为意味着您可以使用核心动画或UIView界面进行更改

如果要使用核心动画类来启动动画,则必须从基于视图的动画块内部发出所有核心动画调用默认情况下,
UIView
类禁用层动画,但在动画块内重新启用层动画。
因此,在动画块外所做的任何更改都不会设置动画

(重点添加。)

来自:

因为iOS视图总是有一个底层,所以UIView类本身直接从层对象派生其大部分数据。因此,对图层所做的更改也会自动反映在视图对象中。此行为意味着您可以使用核心动画或UIView界面进行更改

如果要使用核心动画类来启动动画,则必须从基于视图的动画块内部发出所有核心动画调用默认情况下,
UIView
类禁用层动画,但在动画块内重新启用层动画。
因此,在动画块外所做的任何更改都不会设置动画


(增加了重点。)

你能展示一下你如何创建calayer的代码并改变它的背景色吗?编辑好了,谢谢@但你并不是真的让它动起来。您只是在更改它。CALayer背景色是一个可设置动画的属性,但是以正常方式设置背景色不会设置背景色更改的动画。你需要使用CABasicAnimation使动画的颜色发生变化。你能展示你如何创建calayer的代码并改变它的背景色吗?编辑,谢谢@但你并不是真的让它动起来。您只是在更改它。CALayer背景色是一个可设置动画的属性,但是以正常方式设置背景色不会设置背景色更改的动画。您需要使用CABasicAnimation来更改动画的颜色。有关基础层的内容,请参见:对于隐式层动画,请参见:并注意:“您不能在UIView的基础层上使用隐式动画。您可以直接为UIView的基础层设置动画,但必须使用显式层动画”有关基础层的内容,请参见:对于隐式层动画,请参见:并注意注意:“您不能在UIView的基础层上使用隐式动画。您可以直接为UIView的基础层设置动画,但必须使用显式层动画”显然,如果我想像您一样快速键入,我需要服用更多安非他明复制“n”粘贴以获得胜利!很明显,如果我想像你一样快速打字,我需要服用更多的安非他明复制“n”粘贴以获得胜利!