【问题标题】:Hand over a touch event from a view to one of its subviews将触摸事件从视图移交给其子视图之一
【发布时间】:2012-01-08 09:29:31
【问题描述】:

当触摸的初始位置在 UIView 子类的视图(下面的 A)之外时,我想触发附加到 UIView 子类的 UIPanGestureRecognizer。我有以下情况:

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

A 是附加了 Pan 手势识别器的 UIView,B 是 A 的父视图,C 是触摸的初始位置。然后将触摸移到 A 中,现在我希望 A 接管触摸的处理,并让 Pan 识别器识别手势并触发其回调函数。

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

如何使 A 的手势识别器“接管”此触摸的触摸处理?或者至少接收触摸以便它可以识别平移手势?

我的目标是在周围有几个像 A 这样的子视图的情况下同时跟踪多个触摸时完成这项工作,以便可以将触摸“移交”给其中任何一个。

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

【问题讨论】:

    标签: objective-c ios cocoa-touch uigesturerecognizer


    【解决方案1】:

    这可能不像您正在寻找的那样“干净”,但我能想到的最好的方法是将手势识别器添加到超级视图“B”,然后有“B”循环遍历其子视图以查看手势何时在特定子视图内,然后向该子视图发送消息以执行所需的操作。

    【讨论】:

    • 感谢您的意见。我认为您建议的方式是最直接的方式。我将尝试覆盖超视图“B”中的 touchesBegan/Moved/EndedCancelled: 函数。这样我想我可以同时跟踪几个平移手势。否则我需要几个 PanGestrureRecognizer,不是吗?
    • 您需要几个手势,而且我也不确定是否可以按照您的要求进行操作。我不是 100% 确定这一点,但我认为如果你将手指从“B”拖到“A”,“触摸”仍然归“B”所有,并且不会在“A”中被识别为手势。我认为您仍然可以使用手势识别器,但只需将其添加到“B”而不是子视图。使用手势识别器比低级触摸例程要容易一些。
    • 我已经让它与连接到“B”的一个手势识别器一起工作。我尝试了您的建议,因为它可能比低级触摸例程更容易。使用这种方法,我每次只能移动一个“A”视图,即附加到“B”的单个手势识别器只被触发一次(如我所料)。手势归 B 所有,但在“A”视图的第一个条目上,我选择将指向该视图的指针存储为“B”中的实例变量,因此我只需要点击测试,直到找到“A”然后我一直坚持到平移手势结束。
    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多