UIControl子类 - 如何停止触摸事件流?

时间:2014-02-28 12:20:27

标签: objective-c uigesturerecognizer uicontrol uicontrolevents event-flow

我正在写一个棋盘游戏应用程序(如国际象棋)。主视图识别滑动手势(UISwipeGestureRecognizer)在其全屏视图中的任何位置启动,这使得电路板旋转。

现在我在电路板上添加了一个方形透明子视图。这是一个UIControl子类,可以检测触摸 - 作为棋盘周围的移动:

[self.view addSubview:self.boardControl]

我预计在UIControl子类覆盖的屏幕区域会阻止滑动手势。他们不是。因此,当我快速触摸并拖动(滑动)在我的方形板控制上时,它首先被检测为典当移动,但随后再次被检测为滑动以旋转板。

如何让我的UIControl子类阻止在其框架中启动的触摸事件流到其超级视图?


我可以阻止我的应用对滑动手势作出反应,通过过滤superview级别的触摸,或者通过:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    CGPoint location = [gestureRecognizer locationInView:self.view];
    CGRect frame = self.boardControl.frame;
    if ( CGRectContainsPoint(frame, location) )
        return NO;
    return YES;
}

或通过:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
       shouldReceiveTouch:(UITouch *)touch
{
    CGPoint location = [touch locationInView:self.view];
    CGRect frame = self.boardControl.frame;
    if (CGRectContainsPoint(frame, location))
        return NO;
    return YES;
}

但是我想在一个级别之前解决这个问题:我希望boardControl不会在其帧触摸事件中启动任何启动,在视图层次结构中更高。

UIControl子类可以“覆盖”它的超级视图,并“吃掉”它获得的所有触摸,因此超级视图不需要访问其帧来猜测是否必须过滤掉这样的触摸?

1 个答案:

答案 0 :(得分:0)

您需要的只是实现UIGestureRecognizerDelegate提供了生成请求内容的方法。

我认为你应该从gestureRecognizer:shouldReceiveTouch:例子

开始