2011-05-19 52 views
1

我将两个CAGradientLayers放置在UIButton上,然后根据按钮是否高亮显示(手指朝下)来更改图层。更改UIButton上的渐变时的延迟

问题是,需要几分之一秒才能改变梯度。起初它消失了,我通过清除图层上的所有动画来解决这个问题。

这两个渐变都是事先创建的,在touchDown高光渐变获得隐藏变量设置为FALSE,我认为应该是即时?我错过了什么?有没有更好的方法来实现这一目标?

Code is here

代码的目的是创建按钮像登录按钮显示在这里: enter image description here

回答

2

尝试从UIButton的setHighlighted方法中调用updateControlState而不是touchUp:和touchDownsetHighlighted应该在发生触摸事件时自动调用。我已经完成了一个像这样的按钮CAGradientLayers,它可能比你现在得到的更快。

-(void)setHighlighted:(BOOL)highlighted 
{ 
    [super setHighlighted:highlighted]; 
    [self updateControlState]; 
} 
+0

这样做。坦克一堆! – 2011-05-19 20:47:33

0

的问题可能是由于一个事实,即所有的图纸被主线程上进行。如果主线程被另一个源占用,则在主线程再次调用绘图函数之前,绘图不会更新。

当我在解析XML文件时尝试更新UIProgressBar时,我一直面临这个问题。显然NSXMLParser在主线程上运行,所以我的progressBar没有更新它的进度,直到解析器完成解析。我只好打电话给

[bar setProgress:float] 

这样的:

[bar performSelectorOnMainThread:@selector(setProgress:) withObject:float]; 

希望这有助于。

+0

好主意,但在当时的IM即时通讯没有做任何事情在主线程其他试图改变梯度。 – 2011-05-19 20:45:02

0

一些CALayer属性有隐含的动画。 hidden就是其中之一。你应该这样做,以抑制隐式动画 -

[CATransaction begin]; 
[CATransaction disableActions]; 
[gradientLayerSelected setHidden:FALSE]; 
[CATransaction commit]; 
+0

试过了,它没有奏效。仍然有一个延迟:( – 2011-05-19 20:45:43