ios - 在 `touchesBegan:withEvent:` 之后禁用所有 UIPanGestureRecognizers

标签 ios cocoa-touch uiresponder

有没有办法禁用所有 UIPanGestureRecognizer是触摸效果吗?我希望能够将所有触摸事件隔离到我的一个 subview 并让每个 super View 忽略所有触摸事件,但我只能在 touchesBegan:withEvent: 之后确定这一点.

是否可以停止我的superview的UIPanGestureRecognizer s 在触发后与触摸交互 touchesBegan:withEvent: ?

最佳答案

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

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

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

关于ios - 在 `touchesBegan:withEvent:` 之后禁用所有 UIPanGestureRecognizers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17604982/

相关文章:

iphone - 如何将应用程序的铃声添加到 iPhone 的铃声中?

ios - 部分呈现的 UITableView header

ios - 在 UITextView 中向 NSString 添加外部描边

ios - 如何使用youTube API获取youTube channel 精选视频URL?

iphone - 放置在 UIActionSheet 中时无法输入 UITextFiled

ios - 为什么我们不能在 UITableView、Objective C 上检测到 UITouch 逻辑

ios - UIGestureRecognizer 接收触摸但也将其转发给 UIControl

ios - 如何在多点触控序列中有效地处理 UITouches

ios - 在 ios 中使用后台

ios - 如何在手机快速晃动时计算时间?