我在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之间变化,当变化时)
所以,尽管这样做有效,但改变并不顺利,因为我猜不是它的动画。
如何将不透明度设置为流体变化的动画?我想要抓住的是动画必须快速,以便它跟随平移手势变化而不会滞后。
有什么建议吗?
谢谢
答案 0 :(得分:2)
如果您对手势中的每个更改进行适当的小改动,则更改将会流畅。事实上,这个问题恰恰与你怀疑的相反:不透明度 是隐式的动画,但是你会不断地取消动画,因为你一次又一次地这样做。因此,在整个手势结束之前,不透明度的变化没有机会变得可见。因此,解决方案是阻止动画。
因此,每次调用手势识别器处理程序时,如果状态为UIGestureRecognizerStateChanged
,您将关闭隐式动画,然后然后更改图层的不透明度,如下所示:
[CATransaction setDisableActions:YES];
gLayer.opacity = whatever;
假设每个whatever
值与之前的whatever
值略有不同,结果将是平滑的。 (但当然,每次都要提供合理的whatever
值。我不知道你是否这样做,因为你没有透露你的部分代码。)