1

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

这是一个例子:

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

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

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

4

2 回答 2

10

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

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

这是一个很好的示例,可以帮助您学习 Core Animation。

于 2011-10-22T11:15:22.100 回答
3

来自核心动画编程指南:

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

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

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

祝你好运!

于 2011-10-22T08:07:42.670 回答