子视图是否自动添加为超级视图的UIGestureRecognizers的侦听器?

时间:2016-05-06 16:19:59

标签: ios uigesturerecognizer

我有一个附加到UIView的滑动手势,当滑动位于其子视图顶部时,它似乎没有注册。

3 个答案:

答案 0 :(得分:0)

让我们说A是您希望接收滑动的根UIView,而B是A的子视图,您不想真正想要接收滑动。

  • 如果你不想在B上收到任何手势,你可以在其上输入userInteractionEnabled = false
  • 如果你仍想在B上接受一些手势(但不是轻扫)

你必须将B子类化,以便你可以实现这个方法,并在B

中实现这个方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([gestureRecognizer isKindOfClass:UISwipeGestureRecognizer]) {
        return NO;
    }

    return YES;
}

您还可以看到如何通过实现gestureRecognizer获得各种功能:shouldReceiveTouch:

我希望有所帮助!

答案 1 :(得分:0)

解决方案之一是检查子视图内是否有手势点, 有一个有用的C函数:

/* Return true if `point' is contained in `rect', false otherwise. */
bool CGRectContainsPoint(CGRect rect, CGPoint point)

您可以这样使用:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
  return CGRectContainsPoint(subview.frame, [touch locationInView:self.view]);;
}

答案 2 :(得分:0)

其他解决方案应该可行,但如果它没有自己的事件处理程序,则可能更容易在子视图中设置subview.userInteractionEnabled = false