试图实现如此简单的事情,我几乎要绝望了。
我有一个带有菜单的视图,当通过水平滑动手势进行操作时,使用 touchEvents 从左侧滑动。我不使用手势识别器,我只是使用touchesBegan、touchesMoved等,并跟踪起始触摸位置、中间触摸位置和结束触摸位置之间的x坐标差。效果很好。
但是,当我在主体中有一个 UITableView 时,触摸事件不再沿着层次结构到达管理菜单的视图。我试图通过将触摸传递给 superview/nextResponder 来解决这个问题,这确实有效,但我看到在它停止在层次结构中进一步处理之前有一个 TouchBegan 和 2 个 TouchMoved 调用。
具体来说,我有一个 SlideMenuView,其中有一个菜单视图和一个正文视图。在主体视图中,我有时有 UITableView。我看到(通过 NSLog)touches* 方法从开始到结束都被调用得很好。我将它们传递给 nextResponder 并开始在 SlideMenuView 中看到它们 - 但在两次调用 TouchMoved 后,它们似乎在 SlideMenuView 中停止,但在我的 UITableView 中继续。
我正在重写 UITableView 来执行此操作,但我在其中没有进行任何更改。
我知道这一定是可能的,就像在 Facebook 应用程序中一样。您可以水平滑动身体的任何位置(可滚动)并显示菜单。我希望同样的事情在这里自然发生,但似乎发生了一些奇怪的事情,并且 UITableView 正在消耗或销毁事件。
有人能帮我解决这个问题吗?一定有人以干净的方式实现了这一目标。
好吧,对于任何感兴趣的人 - 我找到了一个干净的解决方案。
苹果知道他们在做什么。回到我们曾经覆盖的那一天touchesBegan
,...但随后他们介绍了GestureRecognizers
。对于某些控件,例如UIScrollView
(以及任何子类,例如UITableView
),他们似乎破坏了他们的事件响应系统。我错误地假设Gesture Recognizers
不要做任何特别的事情,只需连接到这些touchesBegan
,...方法 - 这是不正确的。
最安全的方法是使用Gesture Recognizers
。具体来说,它们有一些选项可以发挥重要作用。例如.cancelsTouchesInView = YES
就我而言。
所以我所做的是使用PanGestureRecognizer
在菜单视图上,设置.cancelsTouchesInView
to YES
,并且它有效。我要避免touchesBegan
,...就像瘟疫一样,为任何复杂的事情编写自定义手势识别器。
我希望这可以帮助像我一样拔头发的人!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)