1

可能重复:
如何防止 CALayer 出现隐式动画?

我使用 CAGradientLayer 作为 UIView 的图层蒙版。目的是有可能只显示 UIView 的一部分,并响应用户输入,通过修改 CAGradientLayer 来更改可见的视图部分。

所有这一切都很好,但是我遇到了一个问题:为了更改 UIView 的可见部分,我修改了 CAGradientLayer 的以下属性的值:

起点终点位置

我在动画块之外更改了这些值,但是更改在屏幕中是动画的。看起来它是用默认的短动画执行的(可能一秒钟长,很难说)。

我的问题是,为什么要进行动画更改?以及如何防止动画?(其实我也想要一个动画,但是自己控制的,不是这个默认的)。

作为补充观察,我知道所有这些属性(startPoint、endPoint 和位置)都被标记为可动画的,但我的理解是这仅意味着它们可以设置在动画块内以使更改动画化。

4

2 回答 2

2

许多动画属性都有默认动画。设置它们时,会发生默认动画。

您可以通过在动画块中设置属性来覆盖默认动画。每当您更改动画块中的属性时,该属性的任何先前动画都会被您的新动画替换。

于 2013-01-04T19:57:55.787 回答
0

对 CALayer 的大多数更改都发生在隐式动画下(例如,它们是自动动画的)。为防止这种情况,请将您的更新包装在以下代码中:

[CATransaction begin];
[CATransaction setDisableActions:YES];
// Your changes to the layer here...
[CATransaction commit];
于 2013-01-04T21:28:02.903 回答