为什么我的CAGradientLayer会动画所有更改?

时间:2011-10-22 06:39:54

标签: iphone objective-c ios calayer cagradientlayer

我有一个CAGradientLayer我希望在用户拖动手指时进行缩放。但是,当我设置框架时,图层会动画为新尺寸。其他属性也会发生这种情况,包括start / endPoint。

以下是一个例子:

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

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

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

2 个答案:

答案 0 :(得分:10)

默认情况下,大多数CALayer的属性都是动画的。您需要禁用这些隐式动画:

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

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

答案 1 :(得分:3)

来自核心动画编程指南:

“更改可设置动画的图层属性的值会导致图层隐式地为从旧值到新值的更改设置动画。”

因此,如果你不想要动画,你需要告诉iOS不要使用:

显式地制作动画
[CATransaction begin];
[CATransaction setAnimationDuration:0.0];
_gradient.frame = CGRectMake(0, 480-toHeight, 320, toHeight);
[CATransaction commit];
祝你好运!