传播特定触摸事件以查看下方

时间:2016-11-04 04:32:04

标签: ios objective-c iphone uiview

我想实现与此类似的功能:

视图A和视图B是同一父UIView的所有子视图。视图A和视图B是兄弟视图。视图A与父视图的帧大小相同。视图B只有大小的一半,它在视图A上方。我想在视图B上捕获滑动事件/手势,但仍然将其他事件/手势(例如,点击)从视图B传播到视图A.所以用户仍然可以与视图A交互(例如,点击视图A上的按钮),而视图B只捕获滑动手势。

我尝试在View B上实现以下方法

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

但似乎是全有或全无的方法。因为我无法在这些方法中检测到事件是点击还是滑动。而且我没有找到任何可以以编程方式触发UIView(不调用触摸相关方法)的API。

2 个答案:

答案 0 :(得分:3)

您应该将后部兄弟视图移动为前视图的子视图,因为此有效视图相同但使UIResponder链正常运行。然后,UIGestureRecognizer可以为您完成剩下的工作。具体来说,它有一个属性CancelsTocuhesInViews,您可以关闭它,因此它不会触摸触摸事件,并且它有一个代理方法,可以让您指定UIGestureRegonizer应该触发的条件。实现您希望使逻辑工作的UIGestureRecognizerDelegate方法。例如,如果您希望覆盖视图仅在一堆其他gestureRecognizers不首先处理点击时处理点击,那么您实现gestureRecognizer(_:shouldRequireFailureOf:)并让其为每个其他手势识别器返回true第一;然后,只有当所有其他手势识别器都无法处理敲击时,您的手势识别器才会触发。

答案 1 :(得分:1)

如果我理解正确,您通常使用UIGestureRecognizer对象及其子类来完成。你可以制作一个手势识别器(即滑动(或者它是平移?)手势识别器)依赖于另一个(一个用于轻击)。

您可以告诉一个手势识别器仅在另一个手势识别器未能检测到其手势时触发。我还没有那么做,所以不能给你更详细的信息,但我会查看这些课程,看看是否有方法将它们链接起来以便处理滑动,只是处理水龙头。如果您没有处理点按,它会自动转到任何处理它的子视图,我想。