我将两个CAGradientLayers
放置在UIButton
上,然后根据按钮是否高亮显示(手指朝下)来更改图层。更改UIButton上的渐变时的延迟
问题是,需要几分之一秒才能改变梯度。起初它消失了,我通过清除图层上的所有动画来解决这个问题。
这两个渐变都是事先创建的,在touchDown高光渐变获得隐藏变量设置为FALSE,我认为应该是即时?我错过了什么?有没有更好的方法来实现这一目标?
代码的目的是创建按钮像登录按钮显示在这里:
我将两个CAGradientLayers
放置在UIButton
上,然后根据按钮是否高亮显示(手指朝下)来更改图层。更改UIButton上的渐变时的延迟
问题是,需要几分之一秒才能改变梯度。起初它消失了,我通过清除图层上的所有动画来解决这个问题。
这两个渐变都是事先创建的,在touchDown高光渐变获得隐藏变量设置为FALSE,我认为应该是即时?我错过了什么?有没有更好的方法来实现这一目标?
代码的目的是创建按钮像登录按钮显示在这里:
尝试从UIButton的setHighlighted
方法中调用updateControlState
而不是touchUp
:和touchDown
。 setHighlighted
应该在发生触摸事件时自动调用。我已经完成了一个像这样的按钮CAGradientLayers
,它可能比你现在得到的更快。
-(void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
[self updateControlState];
}
的问题可能是由于一个事实,即所有的图纸被主线程上进行。如果主线程被另一个源占用,则在主线程再次调用绘图函数之前,绘图不会更新。
当我在解析XML文件时尝试更新UIProgressBar
时,我一直面临这个问题。显然NSXMLParser
在主线程上运行,所以我的progressBar
没有更新它的进度,直到解析器完成解析。我只好打电话给
[bar setProgress:float]
这样的:
[bar performSelectorOnMainThread:@selector(setProgress:) withObject:float];
希望这有助于。
好主意,但在当时的IM即时通讯没有做任何事情在主线程其他试图改变梯度。 – 2011-05-19 20:45:02
一些CALayer
属性有隐含的动画。 hidden
就是其中之一。你应该这样做,以抑制隐式动画 -
[CATransaction begin];
[CATransaction disableActions];
[gradientLayerSelected setHidden:FALSE];
[CATransaction commit];
试过了,它没有奏效。仍然有一个延迟:( – 2011-05-19 20:45:43
这样做。坦克一堆! – 2011-05-19 20:47:33