【问题标题】:iOS - Background view is consuming touch eventsiOS - 背景视图正在消耗触摸事件
【发布时间】:2015-07-18 14:28:48
【问题描述】:
我将首先描述屏幕的外观。它是一个覆盖 100% 屏幕的 UIPageViewController 和一个覆盖 20% 屏幕的 UIView (在页面顶部 vc)。容易,对吧?基本上UIView 已经结束了UIPageViewController。
所以,我用self.view.addSubview(pageVC.view) 以编程方式将UIPageViewController 添加到我的视图控制器中。但UIView 在interface builder
中定义
因此,由于最后添加了 UIPageViewController,它覆盖了 UIView,这迫使我调用 myUIView.layer.zPosition = 1,以便 UIView 可见。
问题是UIView 上的任何触摸都被UIPageViewController 消耗。我该如何解决?
【问题讨论】:
标签:
ios
objective-c
swift
uiview
uikit
【解决方案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];