4

我正在使用平移响应器来捕获用户向下或向上的滑动运动,然后旋转一个圆圈:

如果是肯定的:

 Animated.decay(animation, {velocity: fingerVelocity}).start();

如果为负:

 Animated.decay(animationNegative, {velocity: fingerVelocity}).start();

然后我用上面来旋转两个不同的圆圈:

  const animationStyle = animation.interpolate({
        inputRange: [0, 300],
        outputRange: ["0deg", "360deg"],
        extrapolate: 'identity'
    });

  const animationNegativeStyle = animationNegative.interpolate({
        inputRange: [0, 300],
        outputRange: ["0deg", "-360deg"],
        extrapolate: 'identity'
    });

对于positive它工作正常,但对于负,它逆时针旋转 350 度,然后顺时针旋转。

注意:我使用的原因identity是因为动画类型是 adecay并且我不知道当时的值可能是什么,并且decay动画的速度取决于用户滑动的速度。

因此,当我记录值时,负数是这样的:

value interpolatedValue 0 -360 1 -359 2 -358 3 -357 .... 360 0 361 1 362 2 ....

我知道问题出在了identity,但是如何解决呢?

这甚至可以用Animatedapi吗?

4

2 回答 2

3

我很确定这是解决方案。

你的正常衰变:

Animated.decay(animation, {velocity: fingerVelocity}).start();

现在值正在增加,这不是您想要的,您希望它们减少

 const animationNegative = Animated.multiply(animationNegative, -1);

 const animationNegativeStyle = animationNegative.interpolate({
        inputRange: [0, 1],
        outputRange: ["0deg", "1deg"], // we don't care, we just want the identity to kick in and use the value as is
        extrapolate: 'identity'
    });
于 2018-04-18T23:16:47.230 回答
1
 const animationNegativeStyle = animationNegative.interpolate({
        inputRange: [0, 300],
        outputRange: ["360deg", "0deg"],
        extrapolate: 'identity'
    });

我不确定这个解决方案是否可行,但至少你可以尝试一下并分享它的结果

于 2018-04-18T11:15:22.410 回答