取消手势识别器后以编程方式启动 hitTest:WithEvent 并返回不同的 UIView 以响应事件

Posted

技术标签:

【中文标题】取消手势识别器后以编程方式启动 hitTest:WithEvent 并返回不同的 UIView 以响应事件【英文标题】:Programmatically initiate hitTest:WithEvent after gesture recognizer was canceled and return a different UIView to respond to events 【发布时间】:2014-02-23 09:26:08 【问题描述】:

我将覆盖hitTest:withEvent 以返回自我(最底部的视图)-

当返回 self 时 - 我的视图将响应触摸事件依次启动手势识别器。

如果取消手势或发生某些情况 - 我想手动启动hitTest:withEvent,然后返回不同的视图来处理发生的相同事件/触摸序列。这是必要的,因为手势识别器仅在 hitTest:withEvent 返回手势视图并且其状态更改为 began 后才会启动。

我不知道该怎么做 - 我考虑过手动调用我的子视图

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event



- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event



- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event



- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event



但我没有事件参数(手势接收)

【问题讨论】:

【参考方案1】:

我认为这无法做到,将触摸事件传递给 UIGestureRecognizer 是私有 API。但是您可以将收到的最底部视图的触摸事件传递给您喜欢的任何视图并进行自己的手势识别。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

  UIView* selectView = [self _findMatchView];
  // maybe convert touches to selectView coordinate
  [selectView handleTouchBegan:touches withEvent:event];

【讨论】:

以上是关于取消手势识别器后以编程方式启动 hitTest:WithEvent 并返回不同的 UIView 以响应事件的主要内容,如果未能解决你的问题,请参考以下文章

Apple Watch 应用程序在启动应用程序后以编程方式将视图滚动到顶部

如何以编程方式触发 UIView 的点击手势识别器

以编程方式制作的按钮与 viewController 的手势识别器冲突

病毒扫描后以编程方式移动文件

取消点击手势识别器

在UITextfield中输入文本后以编程方式更改焦点