首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么touchesbegan:在使用UIPinchGestureRecognizer之后永远不会在UIView上被调用?

touchesbegan:在使用UIPinchGestureRecognizer之后永远不会在UIView上被调用的原因是因为UIPinchGestureRecognizer是一个手势识别器,它会拦截并处理触摸事件,而不会将事件传递给UIView。当使用UIPinchGestureRecognizer时,它会监测两个手指之间的捏合手势,并根据手势的变化来执行相应的操作,例如缩放视图。

在使用UIPinchGestureRecognizer时,它会优先处理触摸事件,并阻止touchesbegan:方法被调用。这是因为手势识别器的优先级高于触摸事件的处理。当手势识别器检测到捏合手势时,它会触发相应的回调方法,例如pinch:,而不会触发touchesbegan:方法。

如果您想要在使用UIPinchGestureRecognizer之后仍然能够调用touchesbegan:方法,您可以考虑以下几种方法:

  1. 使用手势识别器的代理方法:手势识别器提供了代理方法,您可以实现这些方法来处理触摸事件。例如,您可以实现gestureRecognizer:shouldReceiveTouch:方法来决定是否允许手势识别器处理触摸事件。在这个方法中,您可以返回NO来阻止手势识别器拦截触摸事件,从而使touchesbegan:方法能够被调用。
  2. 使用多个手势识别器:如果您需要同时处理触摸事件和捏合手势,您可以考虑使用多个手势识别器。您可以将一个手势识别器用于捏合手势的检测,另一个手势识别器用于处理其他触摸事件。这样,您就可以分别处理这两种事件,并且touchesbegan:方法可以被调用。

需要注意的是,以上方法仅适用于使用UIPinchGestureRecognizer的情况。对于其他手势识别器,可能会有类似的限制或行为。在使用手势识别器时,您应该了解其特定的行为和限制,并根据需要选择合适的方法来处理触摸事件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Event官方文档

当系统传递一个touch event,首先会send到一个特定的view。对于touch view来讲,这个view就是被hitTest:withEvent:返回的view;对于shaking-motion event,remote-control事件,action messages,和editing-menu message, view就是firstResponder。如果initial view没有处理event,他就会沿着响应链去查找,顺序为: a) hit-test view或者firstResponder会传递event或者message到它的vc上(如果有的话);如果没有vc,则将event或者message传到superView上 b) 如果view或者vc不能handle event或者message,会传到view的superview上。 c) 之后的所有superView会根据a、b的模式进行传输,如果无法handle的话 d) view树的最上层的view,如果无法handle event或者message,会把event send到window对象 e) 如果UIWindow对象无法handle的话,会传递到application对象单例上 f) 如果application单例无法处理event或者message,则discards。

02
领券