2011-05-19 7 views
1

CAGradientLayersUIButtonに置き、ボタンがハイライトされているかどうか(指が押されている)に応じてレイヤーを変更しています。UIButtonでグラデーションを変更するときの遅延

問題は、勾配が変化するのに1秒以上かかることです。最初は消えて、私は層のすべてのアニメーションをクリアすることでそれを修正しました。

両方のグラデーションが事前に作成されています。ハイライトグラデーションでは、hidden-variableがFALSEに設定されています。私は何を逃したのですか?これを達成するためのもっと良い方法がありますか?

Code is here

コードの目的は、ログインボタンのようなボタンを作成することですが、ここに示した: enter image description here

答えて

2

touchUp:およびtouchDownの代わりに、をUIButtonのsetHighlightedメソッドから呼び出してみてください。タッチイベントが発生したときにsetHighlightedが自動的に呼び出されるはずです。私はCAGradientLayersのようなボタンをやったことがありますが、それは今あなたのものより速いかもしれません。

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

それはそうしました。タンク一房! –

0

を問題は、すべての描画がメインスレッド上で行われているという事実によるものであるかもしれません。メインスレッドが別のソースによって占められている場合、メインスレッドが描画関数を再度呼び出すまで、図面は更新されません。

XMLファイルの解析中にUIProgressBarを更新しようとしていたときにこの問題が発生しました。明らかにNSXMLParserがメインスレッド上で動作するので、私のprogressBarは、パーサーが解析を終了するまで進捗を更新しませんでした。このことができます

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

希望:私はこのような

[bar setProgress:float] 

を呼び出す必要がありました。

+0

グリッドを変更しようとしている時点では、メインスレッドでは何もしません。 –

0

CALayerのプロパティの一部には暗黙のアニメーションがあります。 hiddenがその1つです。暗黙のアニメーションを抑制するには、これを行う必要があります。

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

それを試しても機能しませんでした。まだ遅延があります:( –

関連する問題