在`touchesBegan:withEvent:`之后禁用所有UIPanGestureRecognizer

时间:2013-07-11 23:03:32

标签: ios cocoa-touch uiresponder

有没有办法禁用所有触摸效果的UIPanGestureRecognizer?我希望能够将所有触摸事件隔离到我的某个子视图中并让每个超级视图忽略所有触摸事件,但我只能在touchesBegan:withEvent:之后确定。

触发UIPanGestureRecognizer后,是否可以阻止我的超级视图的touchesBegan:withEvent:与触摸进行交互?

2 个答案:

答案 0 :(得分:2)

要在所有超级视图中禁用和重新启用平移,您应该执行以下操作:

- (void)recursivelyEnable:(BOOL)enable panGesturesInSuperview:(UIView *)superview
{
    for(UIPanGestureRecognizer *recognizer in superview.gestureRecognizers)
    {
        if([superview isKindOfClass:[UIScrollView class]])[(UIScrollView *)superview setScrollEnabled:enable];
        else [recognizer setEnabled:enable];
    }
    if(superview.superview)[self recursivelyEnable:enable panGesturesInSuperview:superview.superview];
}

并像这样使用它:

//Disable panning
[self recursivelyEnable:NO panGesturesInSuperview:self.superview];

//Enable panning
[self recursivelyEnable:YES panGesturesInSuperview:self.superview];

出于某种原因,你不能搞乱UIGestureRecognizer或其任何子类的UIScrollView;这就是为什么我已经包括检查和替代dis /启用平移。

答案 1 :(得分:1)

是使用此代码:

yourGesture.enabled = NO;