1

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

是否可以在触发后阻止我的 superviewUIPanGestureRecognizer与触摸交互touchesBegan:withEvent:

4

2 回答 2

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];

出于某种原因,您不能乱用UIGestureRecognizeraUIScrollView或其任何子类的 s ;这就是为什么我包含了平移的检查和替代禁用/启用。

于 2013-07-11T23:57:25.350 回答
1

是的,使用此代码:

yourGesture.enabled = NO;
于 2013-07-11T23:07:54.583 回答