我將兩個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