Можно ли использовать анимированный setValue с useNativeDriver? - PullRequest
0 голосов
/ 07 января 2020

Я перевожу представления, чтобы следовать жесту перемещения, с наименьшей возможной задержкой.

Я исследую пару вариантов, и один из них - если возможно - скорее отправлять действие setValue в поток пользовательского интерфейса чем поток JS.

Несмотря на то, что в документации указано, что функции типа Animated.timing, Animated.spring, et c могут быть выгружены в поток пользовательского интерфейса с помощью директивы useNativeDriver: true , нет ссылки - по крайней мере, которую я мог бы найти - на, если возможно отправить прямое действие setValue в поток пользовательского интерфейса или нет.

Мой вопрос; Можно ли использовать анимированный setValue с useNativeDriver и как, если возможно.

Ниже приведен грубый пример кода, который я использую:

export default class App extends React.Component {

  constructor(props) {
    super(props);
    this.state = {};
    this.spaceAnimatedTranslations = new Animated.ValueXY();
    this._animatedStyle = {
      transform: [
        { translateX: this.spaceAnimatedTranslations.x }, 
        { translateY: this.spaceAnimatedTranslations.y }
      ]
    };
  }

  onSpaceMove(event) {
    this.spaceAnimatedTranslations.setValue({x: event.nativeEvent.translationX, y: event.nativeEvent.translationY});
  }

  render(){
    return <PanGestureHandler
        key={`test`}
        onGestureEvent={e => this.onSpaceMove(e)}>
      <Animated.View
          ref={ref => {
            this.testAnimatedView = ref;
          }}
          style={[this._animatedStyle]}>
        <View style={styles._box_content}>
          {someContent}
        </View>
      </Animated.View>
    </PanGestureHandler>
  }

}

1 Ответ

1 голос
/ 07 января 2020

Вы должны использовать Animated.event, чтобы выполнить сопоставление непосредственно в собственном потоке. См. Отслеживание жестов . Другая возможность будет использовать react-native-reanimated с react-native-gesture-handler.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...