iOS - 背景视图正在消耗触摸事件

Posted

技术标签:

【中文标题】iOS - 背景视图正在消耗触摸事件【英文标题】:iOS - Background view is consuming touch events 【发布时间】:2015-07-18 14:28:48 【问题描述】:

我将首先描述屏幕的外观。它是一个覆盖 100% 屏幕的 UIPageViewController 和一个覆盖 20% 屏幕的 UIView (在页面顶部 vc)。容易,对吧?基本上UIView 已经结束了UIPageViewController

所以,我用self.view.addSubview(pageVC.view) 以编程方式将UIPageViewController 添加到我的视图控制器中。但UIViewinterface builder

中定义

因此,由于最后添加了 UIPageViewController,它覆盖了 UIView,这迫使我调用 myUIView.layer.zPosition = 1,以便 UIView 可见。

问题是UIView 上的任何触摸都被UIPageViewController 消耗。我该如何解决?

【问题讨论】:

您是否尝试过使用view.insertSubview(...) 代替?或者使用bringSubviewToFront,或者sendSubviewToBack 【参考方案1】:

特定视图的 layer 属性仅用于渲染该特定视图。这就是为什么对图层的更改不会影响与特定视图交互的任何内容的原因。

但是,UIView 上的 -sendSubviewToBack:-bringSubviewToFront: 方法旨在实现您正在寻找的目标。在这里你可以为他们阅读docs。

我编写了这段代码,以便您可以测试此方法的作用。尝试注释/取消注释最后一行或更改添加子视图的顺序,以更好地了解其工作原理。

UIView *firstView = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 100, 100)];
UIView *secondView = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 150, 150)];

firstView.backgroundColor = [UIColor greenColor];
secondView.backgroundColor = [UIColor redColor];

[self.view addSubview:firstView];
[self.view addSubview:secondView];

UITapGestureRecognizer *firstTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(firstTap)];
UITapGestureRecognizer *secondTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(secondTap)];
[firstView addGestureRecognizer:firstTap];
[secondView addGestureRecognizer:secondTap];

[self.view sendSubviewToBack:secondView];

【讨论】:

以上是关于iOS - 背景视图正在消耗触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

监听滑动事件而不消耗任何触摸事件

全屏 UIView 子类作为面纱不消耗触摸事件

UIWebView 在 UIScrollView 内消耗触摸事件

如何在iOS中将触摸事件发送到superview?

使用 UIGestureRecognizer 传递奇怪的 ios 触摸事件

iOS中的触摸事件