2

カスタム ボタンの描画に paintcodeapp を使用しています。「押された」と「通常」の2つの異なるステータスを描きました

ボタンが「押された状態」のときに setNeedsDisplay を呼び出す必要があります

self.highlighted次に、drawRect:メソッドを使用して 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];
}

しかし、うまくいきません。なにか提案を?

4

3 に答える 3

1

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

dispatch_async(dispatch_get_main_queue(), {
   testButton?.backgroundColor = .greenColor()
})
于 2016-03-12T20:39:41.857 に答える
0

試してみてください:

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

管理したいボタンがある一般的なビューに実装されていると想定しました。

于 2012-05-03T13:26:50.740 に答える
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];
}

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

于 2012-05-03T13:47:05.147 に答える