Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何确保子类UIButton的选定状态即使在快速触摸时也被绘制_Iphone_Ios_Uibutton_Drawing_Core Graphics - Fatal编程技术网

Iphone 如何确保子类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

为了在drawRect中使用CoreGraphics进行一些自定义绘图,我对UIButton进行了子类化:。为了响应触摸事件,我添加了以下目标/操作:

    [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:或者甚至只使用预定义图像在状态之间切换