【问题标题】:Why changing values of a CAGradientLayer causes an "automatic" animation? And how can I avoid it? [duplicate]为什么更改 CAGradientLayer 的值会导致“自动”动画?我该如何避免呢? [复制]
【发布时间】:2013-01-04 19:43:14
【问题描述】:

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

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

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

起点 端点 地点

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

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

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

【问题讨论】:

标签: iphone ios core-animation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 2014-05-31
      • 1970-01-01
      相关资源
      最近更新 更多