React Native reanimated 不适用于插值

Posted

技术标签:

【中文标题】React Native reanimated 不适用于插值【英文标题】:React Native reanimated doesn't work with interpolate 【发布时间】:2021-08-19 04:48:07 【问题描述】:

我尝试使用 Animated.interpolate 但我遇到了一个我从未遇到过的奇怪错误。如何解决?谢谢

【问题讨论】:

【参考方案1】:

请查看此文档。

https://docs.swmansion.com/react-native-reanimated/docs/1.x.x/event

https://docs.swmansion.com/react-native-reanimated/docs/1.x.x/code

https://docs.swmansion.com/react-native-reanimated/docs/1.x.x/nodes/interpolate

试试这个。

Animated.useCode(
  () =>
    [
      //...
      Animated.interploate(...),
    ],
  [animated, offset]
);

【讨论】:

我已经检查过了,我以前使用过 Animated API,但我现在不明白是什么问题.. react-native-reanimated 1 是否已过时,是否应该坚持使用第二版? 是的,Worklets 比声明式 api 好得多。 感谢您的建议。我仍然希望有人能帮助我解决这个问题,它真的很困扰我 添加了一些我想让你尝试的例子。【参考方案2】:

我设法找到了问题。react-native-reanimated 的版本是 2.2.0,我安装了 1.12.0 的版本,终于可以工作了

【讨论】:

【参考方案3】:

不命名inputRangeoutputRange 试试这个:

import  useSharedValue, interpolate  from 'react-native-reanimated' // version 2.x

const animatedValue = useSharedValue(0)

const interpolatedValue = interpolate(
  animatedValue.value,
  [valueMin, valueMax],
  [interpolatedValueMin, interpolatedValueMax]
)

注意:为了更好的用户体验,请使用react-native-reanimated,它使用 UI 线程而不是 JS 线程来执行动画?

【讨论】:

【参考方案4】:
import Animated,interpolate from 'react-native-reanimated';

const scale = interpolate(progress, 
    inputRange: [0, 1],
    outputRange: [1, 0.8],
  );

const borderRadius = interpolate(progress, 
    inputRange: [0, 1],
    outputRange: [0, 10],
  );

当我这样做时,我的问题就解决了

【讨论】:

【参考方案5】:

使用 interpolate 的变量应该在 useAnimatedStyle 内。

const positionX = useSharedValue(-40);
const animatedStyles = useAnimatedStyle(() => 
    const opacity = interpolate(positionX.value, [-40, 0], [0, 1]); // <- It must be here to work.
    return 
      transform: [ translateX: positionX.value ],
      opacity,
    ;
  );

【讨论】:

以上是关于React Native reanimated 不适用于插值的主要内容,如果未能解决你的问题,请参考以下文章

react-native-reanimated 的构建失败

构建失败'配置项目':react-native-reanimated'时出现问题。在 React 原生项目中

在 react-native-reanimated 中继续循环动画

构建失败,因为 react-native-reanimated

如何使用 react native reanimated 2 为多个组件不透明度设置动画?

MainApplication.java 上的 React-Native-Reanimated 错误