将触摸事件从视图切换到其子视图

问题描述:

当触摸的初始位置在UIView子类的视图(A下方)之外时,我想要触发附加到UIView子类的UIPanGestureRecognizer。我有以下的情况:将触摸事件从视图切换到其子视图

/-------------------/ 
| B     | 
|   /---/ | 
|   | A | | 
|   /---/ | 
|  C   | 
|     | 
/-------------------/ 

A是具有附加给它的潘手势识别,B是A的上海华,UIView的和C是触摸的初始位置。触摸然后移到A中,现在我要A接管触摸和Pan识别器的处理,以识别该手势并触发其回调函数。

据我所知,B由初始hitTest:ing返回,因此将触发touchesBegan/Moved/Ended/Changed:处理触摸。

如何让A的“手指识别器”接管触摸操作?或者至少接受触摸,以便它可以识别平移手势?

我的目标是在有几个子视图像A环绕的情况下同时跟踪多个触摸时进行这项工作,以便触摸可以被“移交”给任何人。

有关如何解决此问题的任何想法将不胜感激!

这可能不像您所寻找的那样“干净”,但我可以想到的做您想做的事情的最佳方式是将手势识别器添加到超级查看“B”,然后使用“B “遍历其子视图以查看手势何时位于特定子视图内,然后将消息发送到该子视图以执行所需的操作。

+0

感谢您的意见。我认为你建议的方式是最直接的方式。我将尝试在Superview“B”中重写touchesBegan/Moved/EndedCancelled:函数。这样我猜我可以同时跟踪几个平移手势。否则,我需要几个PanGestrureRecognizers,不是吗? – Jonas

+0

你需要几个手势,我也不确定是否有可能做你在问什么。我对此并不十分确定,但我认为,如果您将手指从“B”拖动到“A”,该“触摸”仍属于“B”,并且不会在“A”中被识别为手势。我认为你仍然可以使用手势识别器,但只需将它添加到“B”而不是子视图。使用手势识别器比低级别触摸例程稍微简单一些。 – Ron

+0

我已经将它与一个连接到“B”的手势识别器一起工作。我试过你的建议,因为它可能比低级别的触摸例程更容易。我只能在每次使用这种方法时移动其中一个“A”视图,即附加到“B”的单个手势识别器仅被触发一次(如我所料)。该姿势由B拥有,但在第一个条目上的“A” - 我选择将该视图的指针作为“B”中的实例变量存储,因此我只需要进行测试直到找到“A”然后我坚持下去,直到平底锅手势完成。 – Jonas