Iphone 如何确保子类UIButton的选定状态即使在快速触摸时也被绘制
为了在drawRect中使用CoreGraphics进行一些自定义绘图,我对UIButton进行了子类化:。为了响应触摸事件,我添加了以下目标/操作:Iphone 如何确保子类UIButton的选定状态即使在快速触摸时也被绘制,iphone,ios,uibutton,drawing,core-graphics,Iphone,Ios,Uibutton,Drawing,Core Graphics,为了在drawRect中使用CoreGraphics进行一些自定义绘图,我对UIButton进行了子类化:。为了响应触摸事件,我添加了以下目标/操作: [self addTarget:self action:@selector(selectedButton:) forControlEvents:UIControlEventTouchDown | UIControlEventTouchDragInside]; [self addTarget:self action:@selecto
[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];
}
这很有效。唯一的问题是,如果我真的快速触地/向上触地,动作仍然会被处理,但选中/取消选中的方法会被调用得如此之快,以至于背景永远不会更新。但如果我再按一下,效果会很好
我错过了什么?我怎样才能让我的背景更新为最轻微的接触?我已尝试延迟取消选择调用以更新布局,但没有效果。我认为您可能需要在主线程上调用setNeedsDisplay:
[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
我不认为waitUntilDone是或否会有任何区别?..取消选择按钮的uicontrol EventTouchUpInside不也应该存在吗?我的错误。我以前确实在那里。编辑Q以添加它。在这种情况下,我会尝试这些答案中的一些技巧和解决方法runloop、CatTransaction等,或者找到一种切换图像而不是自定义绘图的方法,即只设置图像:forState:或者甚至只使用预定义图像在状态之间切换