2011-05-19 18 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