iOS:无法识别子视图上的手势

Posted

技术标签:

【中文标题】iOS:无法识别子视图上的手势【英文标题】:iOS: Gesture on child view not recognized 【发布时间】:2012-02-25 08:17:53 【问题描述】:

我有一个 UIScrollView 作为我的根视图,还有一个 UIImageView(我们称之为父视图)作为根视图的子视图。然后我添加另一个 UIImageView (lat's call it child view)作为父视图的子视图。子视图不包含在父视图的边界中。这是我的视图布局的可视化表示。

................................
.       root view              .
.                  .........   .
.  ..............  . child .   .
.  .parent view .  . view  .   .
.  ..............  .........   .
.                              .
................................

现在,当我将 UIPanGestureRecognizer 添加到子视图时,无法识别手势。我已经检查了 userInteractionEnabled 和所有内容。当我将子视图设置为根视图的子视图时,手势被正确识别。有谁知道是什么导致了这个问题?

【问题讨论】:

【参考方案1】:

我认为这个问题是因为您将UIGestureRecognizer 添加到在其父边界中不可见的东西上。如果您在parentView 上设置clipsToBounds = YES,则不会显示childView,对吗?这就是它的处理方式。您可能会看到它,但“它不存在”。

是这样的:你在厨房里,你可以听到客厅里的电视,你知道它在那里,但你看不到它.另一方面,如果墙壁是不可见的,你可以看到它,但你不能与它互动。因为你不能穿墙。

希望这对您有所帮助。

【讨论】:

我也是这么想的。但我需要将子视图附加到父视图,以便它们可以一起移动。有没有办法在不使用子视图的情况下实现这一点? 您可以使用 UIView 作为父视图,并将两个图像都添加到这个视图中,并将 GestureRecognizer 附加到 UIView 而不是其中一个图像。当您移动大视图时,这将使两个 em 都移动。 我接受这个作为我问题的答案。这对其他 ios 程序员很有帮助,因为遇到这种情况并不常见。【参考方案2】:

为您的子视图设置tag

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]
          initWithTarget:self
                  action:@selector(singleTapGestureCaptured:)];
[[rootview viewWithTag:111]addGestureRecognizer:singleTap];

-(void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture 

    //your code;

【讨论】:

我已经将 UIGestureRecognizer 添加到我的子视图中。问题是手势无法识别,即视图不响应点击、平移等 我试过了,你是对的 Ryan,它不起作用。添加子视图时,您应该调整父视图的大小。您可能必须重写 sizeThatFits 方法。

以上是关于iOS:无法识别子视图上的手势的主要内容,如果未能解决你的问题,请参考以下文章

为啥父 UIStackView 无法识别子 StackView 的高度?

Swift:手势识别器无法识别的选择器发送到实例

缩放时,UIScrollview 子视图无法识别手势

无法识别子查询中“选择”附近的输入

ios 滑动手势在子视图上未被识别,父视图上的手势

使用点击手势识别器时,IOS swift应用程序无法正常工作