【问题标题】:Why is my CAGradientLayer animating all changes?为什么我的 CAGradientLayer 为所有更改设置动画?
【发布时间】:2011-10-22 06:39:53
【问题描述】:

我有一个CAGradientLayer,我想在用户拖动手指时对其进行缩放。但是,当我设置框架时,图层会动画到新的大小。其他属性也会出现这种情况,包括 start/endPoint。

这是一个例子:

_gradient.frame = CGRectMake(0, 480-toHeight, 320, toHeight);

然而,如果我只在用户拖动 10 个左右像素时调用它,图层不会简单地跳转到新大小,它会以平滑但快速缓和的动画进行动画处理。我很肯定这不会在动画块中调用。为了进一步调试,我还在同一范围内为UIView 的框架设置了动画,并且没有动画。

我是 CALayers 的新手,所以也许我做错了什么。

【问题讨论】:

  • 你把你的代码包在里面了吗..[UIView beginAnimations:nil context:NULL];,它是commit..或者你打开它后忘记了commit?正如@mjisrawi 所说..发布一些代码..

标签: iphone objective-c ios calayer cagradientlayer


【解决方案1】:

CALayer 的大部分属性默认是动画的。您需要禁用这些隐式动画:

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
// change layer's properties
_gradient.frame = newFrame;
[CATransaction commit];

Here is a good sample 帮助你学习核心动画。

【讨论】:

    【解决方案2】:

    来自核心动画编程指南:

    “更改可动画层属性的值会导致层隐式地对从旧值到新值的变化进行动画处理。”

    所以如果你不想要动画,你需要告诉 iOS 不要明确地使用动画:

    [CATransaction begin];
    [CATransaction setAnimationDuration:0.0];
    _gradient.frame = CGRectMake(0, 480-toHeight, 320, toHeight);
    [CATransaction commit];
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      相关资源
      最近更新 更多