Как избежать триггеров перемещения от реакции-нативного жеста-обработчика, если предыдущий триггер движения еще не завершен? - PullRequest
0 голосов
/ 06 января 2020

Я использую react-native-gesture-handler с Animated объект react-native.

Моя проблема в том, что мне нужно выполнить тяжелую задачу в событиях перемещения react-native-gesture-handler, которых я не могу избежать. Вот почему я хочу использовать тот факт, что я CAN принимаю анимацию с опущенными промежуточными клавишами.

Чтобы добиться этого, я не использую интерполяцию или замедление и т. Д. c, а скорее пытаюсь прыгнуть туда, где находятся координаты xy жестов. Для этой цели я использую метод Animated.ValueXY setValue, как видно из приведенного ниже кода. В этом коде часть // unnecessary heavy task фактически представляет собой симуляцию тяжелой задачи.

Поэтому вопрос в том, как избежать триггеров перемещения с react-native-gesture-handler если предыдущий триггер перемещения еще не завершен.

Вы можете увидеть код в действии в этой экспозиции .

  onSpaceMove(event) {
    if (!(this.moveOK)) return;
    this.moveOK = false;
    // unnecessary heavy task
    let a = 0;
    for (let i = 1; i < 1000000; i++) {
      if (a ** 5 > 123123123123) a = 0;
      else a = a + 1;
    }

    this.spaceAnimatedTranslations.setValue({
      x: Math.floor(event.nativeEvent.absoluteX - c_initial_coordinate_left),
      y: Math.floor(event.nativeEvent.absoluteY - c_initial_coordinate_top),
    });
    this.moveOK = true;
  }


Примечание1: Если Экспо-закуска очень медленная, вы можете точно настроить выше для l oop, чтобы иметь достаточно медленное перемещение в вашем устройстве.

Примечание2: Пожалуйста, соблюдайте флаг, this.moveOK, также не решает проблему странным образом.

Примечание 3: useNativeDriver (<Animated.View ... useNativeDriver={true}>...</Animated.View>) также не улучшил производительность.

...