使用平移手势动画CALayer不透明度并不流畅

时间:2014-05-22 15:15:54

标签: ios core-animation calayer

我在CALayer上覆盖了CAGradientLayer。我希望通过平移它们所在的视图来设置它的不透明度。

所以我只是简单地实例化CAGradientLayer:

这是我实例化图层的方式:

CAGradientLayer * gLayer = [CAGradientLayer layer];
NSArray * stops;
NSNumber *stopOne = [NSNumber numberWithFloat:0.0];
NSNumber *stopTwo = [NSNumber numberWithFloat:1.0];
[gLayer setColors:@[(id)clearColor.CGColor,(id)darkColor.CGColor]];
[gLayer setLocations:stops];

然后我在手势中改变不透明度:     gLayer.opacity =(这里我把变化在0到1之间变化,当变化时)

所以,尽管这样做有效,但改变并不顺利,因为我猜不是它的动画。

如何将不透明度设置为流体变化的动画?我想要抓住的是动画必须快速,以便它跟随平移手势变化而不会滞后。

有什么建议吗?

谢谢

1 个答案:

答案 0 :(得分:2)

如果您对手势中的每个更改进行适当的小改动,则更改将会流畅。事实上,这个问题恰恰与你怀疑的相反:不透明度 是隐式的动画,但是你会不断地取消动画,因为你一次又一次地这样做。因此,在整个手势结束之前,不透明度的变化没有机会变得可见。因此,解决方案是阻止动画。

因此,每次调用手势识别器处理程序时,如果状态为UIGestureRecognizerStateChanged,您将关闭隐式动画,然后然后更改图层的不透明度,如下所示:

[CATransaction setDisableActions:YES];
gLayer.opacity = whatever;

假设每个whatever值与之前的whatever值略有不同,结果将是平滑的。 (但当然,每次都要提供合理的whatever值。我不知道你是否这样做,因为你没有透露你的部分代码。)