如何让UIView忽略触摸而不释放它?

时间:2011-10-10 13:01:42

标签: objective-c ios uiview

我在UIScrollView上有一个透明的UIView。 UIView通过检查三个touchesMoved事件来确定是否允许滚动视图滚动。在事件之后,我希望视图禁用用户交互,因此将进行滚动。用户甚至不应该注意到延迟。

但是,将视图的userInteractionEnabled设置为NO后,它会一直声明所有touchesMoved事件,直到它被释放。这意味着用户在能够滚动之前被迫放开视图。

在视图发布之前,使用hitTest也不会有效。移动时不会调用hitTest。

我会将触摸事件发送到UIScrollView,但由于它有自己隐藏的触摸处理,它很高兴忽略了那些。

任何方式让UIView停止声称触摸事件而不必放弃它?

2 个答案:

答案 0 :(得分:3)

隐藏UIView。根据文件:

  

隐藏视图从窗口可视地消失,并且不会接收输入事件

有关详情,请参阅课程参考:http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html

答案 1 :(得分:3)

尝试取消接触:

How to cancel a sequence of UITouch events?

P.S。如果有必要,我假设你正在将接触传播给下一个响应者:

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    [[self nextResponder] touchesBegan:touches withEvent:event];
}

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent *)event {
    [super touchesMoved:touches withEvent:event];
    [[self nextResponder] touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    [[self nextResponder] touchesEnded:touches withEvent:event];
}