2

我正在使用paintcodeapp 来绘制我的自定义按钮。我画了两种不同的状态“按下”和“正常”

当按钮处于“按下状态”时,我需要调用 setNeedsDisplay

self.highlighted然后我在drawRect:方法中使用分派两个抽奖

我试过:

- (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
- (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 回答
0

尝试:

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

我假设它是在具有您要管理的按钮的通用视图中实现的。

于 2012-05-03T13:26:50.740 回答