在UIButton上更改渐变时延迟

时间:2011-05-19 13:38:45

标签: objective-c cocoa-touch ios4 uibutton

我在CAGradientLayers上放置两个UIButton,然后根据按钮是否突出显示(手指向下)更改图层。

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

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

Code is here

代码的目的是创建按钮,如此处显示的“登录”按钮: enter image description here

3 个答案:

答案 0 :(得分:2)

尝试从UIButton的updateControlState方法而不是setHighlighted:和touchUp调用touchDown。触摸事件发生时,应自动调用setHighlighted。我之前用CAGradientLayers做了一个按钮,它可能比你现在获得的更快。

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

答案 1 :(得分:0)

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

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

[bar setProgress:float]
像这样:

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

希望这有帮助。

答案 2 :(得分:0)

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

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