UITapGestureRecognizer 仅针对 UIScrollView 的起始区域触发

Posted

技术标签:

【中文标题】UITapGestureRecognizer 仅针对 UIScrollView 的起始区域触发【英文标题】:UITapGestureRecognizer only triggered for starting area of UIScrollView 【发布时间】:2016-06-20 12:18:11 【问题描述】:

我在主视图控制器的 UIScrollView 中添加了几个子视图。每个子视图的视图控制器都有自己的点击识别器。问题是,只有在屏幕上的起始区域点击才会被识别。滚动视图并点击超出起始区域后,将不再调用点击处理程序。

这个 SO 帖子 UIButton in non-visible area of UIScrollView 似乎是相关的,但它的解决方案描述对我来说并不是很清楚......

可以在以下位置找到一个简单的报告项目:dropbox link

谢谢。

【问题讨论】:

什么问题,你已经为这两个部分添加了点击手势? 滚动视图的内容大小为2000*800,大于屏幕大小。当应用程序最初启动和用户录音时,点击处理程序被识别。如果您向右滚动屏幕并点击最右侧的区域,将不再触发点击处理程序。 @MikeAlter 这两部分是指滚动视图的可见部分和不可见部分吗?如果是这样,我如何为超出可见区域的部分添加点击手势? 【参考方案1】:

请检查您的contentview 大小或setbackground color 以获取scrollviewcontentviewContenview 我认为大小没有增加。

【讨论】:

对不起,如果我错过了一些明显的东西。如何检查内容视图。我没有在任何地方使用它。顺便说一句,我检查了滚动视图的大小,它肯定设置得足够大。我在简单的复制中也有背景色。谢谢。 您还面临问题吗? @jackX。解决方案是什么? @AviTsadok 检查您的内容视图的高度限制。【参考方案2】:

我已经下载了你的项目,看到

SSubViewController *pvc = [SSubViewController controllerWithSubViewID:0]; 

pvc 框架超出范围

SSubViewController *pvc = [SSubViewController controllerWithSubViewID:0];
[self.scrollView addSubview:pvc.view];
[self addChildViewController:pvc];
[pvc.view setBackgroundColor:[UIColor grayColor]];
[pvc.view setFrame:CGRectMake(0, 0, 400, 200)];

[pvc didMoveToParentViewController:self];

SSubViewController *pvc1 = [SSubViewController controllerWithSubViewID:1];
[self.scrollView addSubview:pvc1.view];
[pvc1.view setBackgroundColor:[UIColor yellowColor]];
[self addChildViewController:pvc1];
[pvc1 didMoveToParentViewController:self];
[pvc1.view setFrame:CGRectMake(0, 400, 400, 200)];

现在看看颜色

你可以看到灰色和黄色框架

【讨论】:

知道了。那行得通。感谢迈克的详细解释!

以上是关于UITapGestureRecognizer 仅针对 UIScrollView 的起始区域触发的主要内容,如果未能解决你的问题,请参考以下文章

使用 UITapGestureRecognizer 无法识别的选择器

UIlabel 中的 UITapGestureRecognizer 错误

UITapGestureRecognizer 的问题

带有点击事件的 UITapGestureRecognizer

UIButton 上的 UITapGestureRecognizer

为啥 UIButton 会覆盖 UITapGestureRecognizer?