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

3

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

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

现在,当我在子视图上添加UIPanGestureRecognizer手势时,手势无法识别。我检查了userInteractionEnabled等所有内容。但是,当我将子视图设置为根视图的子视图时,手势可以正确识别。有人知道这个问题的原因吗?

2个回答

5
我认为这个问题是由于您将UIGestureRecognizer添加到了父视图边界之外的某些不可见位置导致的。如果您在parentView上设置clipToBounds = YESchildView就不会被显示出来,对吧?它就像被隐藏起来了一样。您可能可以看到它,但实际上“它并不存在”。
这就像是这样:你在厨房,听到客厅里的电视声,你知道电视在那里,但你看不见它。另一方面,如果墙壁是透明的,你可以看到它,但你不能与它交互。因为你无法穿过墙壁。
希望这能有所帮助。

这也是我认为的。但是我需要将子视图附加到父视图,以便它们可以一起移动。有没有不使用子视图就能实现这个目标的方法? - Ryan Dao
你可以使用一个 UIView 作为父视图,并将两个图像添加到其中,然后将 GestureRecognizer 附加到 UIView 而不是其中一个图像上。这样当您移动大视图时,两个图像都会移动。 - hellozimi
我接受这个作为我的问题的答案。这对其他iOS程序员很有帮助,因为遇到这种情况并不是很常见。 - Ryan Dao

0

为您的子视图设置tag

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

-(void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture 
{
    //your code;
}

我已经将UIGestureRecognizer添加到我的子视图中。问题是手势没有被识别,即视图不会响应轻触、滑动等操作。 - Ryan Dao
我试过了,你是对的Ryan,它不起作用。当您添加子视图时,应调整父视图的大小。您可能需要覆盖sizeThatFits方法。 - Franck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接