【问题标题】:React Native - onTouchStart vs PanResponder for multiple touches per secondReact Native - onTouchStart 与 PanResponder 每秒多次触摸
【发布时间】:2017-08-03 16:27:01
【问题描述】:

我正在使用 React Native 开发一个应用程序,它必须尽快响应点击手势,因为一秒钟内可以触发多个点击事件。无需双击或移动手势,但需要注意同时点击。我一直在测试 onTouchStartPanResponder | onPanResponderGrant 并看到:

  • onTouchStart 在同时轻按两次时会触发两次,而onPanResponderGrant 只会调用一次。
  • 即使我有onMoveShouldSetPanResponderfalseonPanResponderMove 也会被触发,并且当两个点击同时或一秒钟内有多个点击时会触发多次。
  • 在一秒钟内完成多次点击时,onTouchStart 工作正常,但onPanResponderGrant 触发的次数更少。

基于以上原因,我认为我最好使用onTouchStart

现在的问题是:我是否应该使用onTouchStart,即使React Native docs 建议使用PanResponder 进行多点触控手势?

PanResponder 将多个触摸整合为一个手势。它使单点触控手势对额外的触摸具有弹性,并可用于识别简单的多点触控手势。

或者我错过了PanResponder 的一些东西?

编辑:

另外,gestureState.numberActiveTouches 始终为 1,同时点击两次时的事件。我认为这可以解决问题。

【问题讨论】:

  • 这是滚动视图吗?
  • @sooper - 不,是给一些鼓用的。
  • 嗨@Manolo,我的回答令人满意吗?如果是这样,请接受它,否则让我们知道缺少什么:)。 (编辑:啊,我的错,赏金正在取代我想的检查图标)
  • @Jeremie - 嗯,你的回答是基于常识并且是有道理的,但是多点触控手势呢?他们不会同时被解雇。为什么不适用于PanResponder?这只是没有记录的行为吗?
  • 要检测多点触控,我想我们必须容忍用户不会同时按下 3 个手指,因此 API 为用户留下了一些延迟来实现它。这解释了为什么它每秒被触发几次而不是更多。我不确定我是否理解您的评论“不会同时触发多点触控手势”。对我来说听起来很复杂,您希望用户用多个手指同时按下 2 个不同的鼓吗?

标签: javascript react-native touch gesture


【解决方案1】:

从 PanResponder 的定义中,我了解到它是用来解释多点触控手势并渲染 1 个动作的。 就像我用两根手指在图像上点击一样,我可以将图像复制到剪贴板。

虽然您似乎想要不同的行为:我用 2 个手指敲击 1 个鼓钹,但您想要获得 2 个声音。 就好像您将鼓镲分成无数个按钮,无论您做什么,每次敲击都会得到一个单独的声音。

那么你不想使用 PanResponder,因为它会尝试将一堆动作解释为一个声音,而你希望每个动作产生一个单独的声音。而 onTouchStart 简单地完成了工作。所以你可能用它做正确的事!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多