1

我将 UIButton 子类化,以便在drawRect:. 为了响应触摸事件,我添加了这些目标/动作:

    [self addTarget:self action:@selector(selectedButton:) forControlEvents:UIControlEventTouchDown | UIControlEventTouchDragInside];
    [self addTarget:self action:@selector(deSelectedButton:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchDragOutside | UIControlEventTouchUpOutside];

一个示例实现是这样的:

- (void)selectedButton:(id)sender {
      self.isSelected = YES;
      [self setNeedsDisplay];
}

这工作得很好。唯一的问题是,如果我非常快速地触地/向上,动作仍然被处理,但是选择/取消选择的方法被调用得太快以至于背景永远不会更新。但如果我再按下一段时间,效果会很好。

我在这里想念什么?我怎样才能让我的背景更新最轻微的接触?我曾尝试延迟 deSelect 调用以更新布局,但它没有效果。

4

1 回答 1

0

我认为您可能需要在主线程上调用 setNeedsDisplay:

[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];

(我不认为 waitUntilDone 是 yes 还是 no 会有什么不同?...)

于 2013-05-22T18:28:45.390 回答