我可以取消 UILongPressGestureRecognizer,关闭视图并长按以识别下面的视图吗?

Can I cancel a UILongPressGestureRecognizer, dismiss the view and get a long press to recognize on the view underneath?

我有一个带有长按手势识别器的视图。

在我的应用中,我必须临时在其上放置另一个视图,但是底层视图所在的区域是透明的,因此用户仍然可以看到下面的视图。

我在新的顶部视图中添加了一个 UILongPressGestureRecognizer。当用户长按他们可以看到的视图(在顶视图下方)时,我会在顶视图中识别它。我取消它(使用 g.enabled = NO;)然后关闭我的顶视图。

现在,我想让用户想要长按的视图触发其手势识别器。有办法吗?

更新:

根据@matt 在评论中的建议,我从顶视图中删除了手势识别器——这给了我更多的洞察力和控制力——但我还没有做到。

我已经尝试过 hitTest:withEvent: 来忽略我透明区域中的事件,但到目前为止我还没有让它起作用(让事件在底层视图中启动一个手势)。

现在我正在尝试重新路由 touchesBegan:withEvent:,方法是让我的顶视图将它们直接发送到它的视图控制器,看看它是否会从那里进一步传播,但我还没有让它工作.

我仍在调试以确定触摸是否被发送到底部视图——我不确定这是否最终会启动识别器,这是我的目标。

如果顶视图只是一个视图,那么根本不向其添加手势识别器可能会更容易。您可以将手势识别器附加到它后面的视图。手势识别器自动向上操作视图层次结构,因此附加到后面视图的手势识别器将响应顶视图上的长按。

如果顶层视图属于自定义的包含视图控制器,而其后面的视图属于父视图控制器,则包含视图控制器具有对父视图控制器的引用作为其parentViewController。因此,您在顶视图中的手势识别器处理程序可以向 parentViewController 发送消息,然后它可以执行它在自己的手势识别器处理程序中所做的任何事情。