对于事件响应关系是有区别对待的,而且tap响应时间过后,系统会开始判断点击按钮,把刚才的长按理解为长期的touch down状态。这样处理我感觉很奇怪,万全之策还是要解决冲突,因为首先响应Tap事件,所以处理Tap事件的代理方法,过滤掉UIButton的影响。
具体实现,首先添加UIGestureRecognizerDelegate协议,然后把 Tap手势识别对象设置代理self,然后实现如下代码:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UIButton class]]){
return NO;
}
return YES;
}
同理,其他的input事件也可以通过下面的代码实现:
比如UISlider:
-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch {
if([touch.view isKindOfClass:[UISlider class]])
{
return NO;
}else{
return YES;
}
}
iOS6之后似乎已经修复这个问题了