为什么更改CAGradientLayer的值会导致“自动”动画?我怎么能避免它呢?

时间:2013-01-04 19:43:15

标签: iphone ios core-animation

  

可能重复:
  How to prevent CALayer from implicit animations?

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

所有这一切都运行正常,但我遇到了一个问题:要更改可见的UIView部分,我修改了CAGradientLayer的以下属性的值:

的startPoint 端点 位置

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

我的问题是,为什么要改变动画?以及如何阻止动画? (事实上​​我想要一个动画,但由我自己控制,而不是默认的动画。)

作为一个额外的观察,我知道所有这些属性(startPoint,endPoint和locations)都被标记为可动画,但我的理解是这只意味着它们可以在动画块中设置以使动画更改。 / p>

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

[CATransaction begin];
[CATransaction setDisableActions:YES];
// Your changes to the layer here...
[CATransaction commit];