2012-05-03 10 views
2

私は自分のカスタムボタンを描画するのにpaintcodeappを使用しています。 私はボタンが、私は2つのdrawRect:方法でself.highlightedを使用して描画派遣押したときにUIButtonを再描画

を「状況を押された」のときにsetNeedsDisplayを呼び出す必要があり

を「押す」とは、2つの異なる状態を描き、「ノーマル」しました

私が試してみた:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventTouchDown]; 
     [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventTouchUpInside]; 
     [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlStateNormal]; 

    } 
    return self; 
} 

-(void)didDetectEvent:(id)sender { 
    [self setNeedsDisplay]; 
} 

が、それは動作しません。 提案がありますか?私はそれはあなたが管理するボタンがあり、一般的な観点で実装されているものと

-(void)didDetectEvent:(id)sender { 
    UIButton *btn = (UIButton *)sender; 
    [btn setNeedsDisplay]; 
} 

:で

答えて

0

は試してみてください。

+0

また、0.2秒の遅延後にsetNeedsDisplayを呼び出す必要がありました。コードを他の回答に投稿します – Luka

0
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 

     [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventAllTouchEvents]; 
    } 
} 


    -(void)didDetectEvent:(id)sender { 
     [self setNeedsDisplay]; 
     [self performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0.2]; 
} 

これは機能します。私はこれが最善の解決策であるとは完全には確信していません。

1

私はこの同じ問題を抱えていました(Swiftを使用)。背景を設定し、ユーザーのUIを遅くしてもすぐに表示する必要があります。解決策は、それがメインスレッドで実行されていることを確認することです。

dispatch_async(dispatch_get_main_queue(), { 
    testButton?.backgroundColor = .greenColor() 
})