我在CAGradientLayers
上放置两个UIButton
,然后根据按钮是否突出显示(手指向下)更改图层。
问题是渐变需要几分之一秒才能改变。起初它消失了,我通过清除图层上的所有动画来修复它。
两个渐变都是事先创建的,而在touchDown上,高亮渐变使隐藏变量设置为FALSE,我认为应该是即时的?我错过了什么?是否有更好的方法来实现这一目标?
代码的目的是创建按钮,如此处显示的“登录”按钮:
答案 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];