React Native: How do you animate the rotation of an Image?

后端 未结 2 684
执念已碎
执念已碎 2020-12-24 05:08

Rotation is a style transform and in RN, you can rotate things like this

  render() {
    return (
      

        
相关标签:
2条回答
  • 2020-12-24 05:22

    Don't forget to add property useNativeDriver to ensure that you get the best performance out of this animation:

    // First set up animation 
    Animated.timing(
        this.state.spinValue,
      {
        toValue: 1,
        duration: 3000,
        easing: Easing.linear,
        useNativeDriver: true
      }
    ).start();
    
    0 讨论(0)
  • 2020-12-24 05:41

    You can actually animate strings using the interpolate method. interpolate takes a range of values, typically 0 to 1 works well for most things, and interpolates them into a range of values (these could be strings, numbers, even functions that return a value).

    What you would do is take an existing Animated value and pass it through the interpolate function like this:

    spinValue = new Animated.Value(0);
    
    // First set up animation 
    Animated.timing(
        this.spinValue,
      {
        toValue: 1,
        duration: 3000,
        easing: Easing.linear, // Easing is an additional import from react-native
        useNativeDriver: true  // To make use of native driver for performance
      }
    ).start()
    
    // Next, interpolate beginning and end values (in this case 0 and 1)
    const spin = this.spinValue.interpolate({
      inputRange: [0, 1],
      outputRange: ['0deg', '360deg']
    })
    

    Then use it in your component like this:

    <Animated.Image
      style={{transform: [{rotate: spin}] }}
      source={{uri: 'somesource.png'}} />
    

    In case if you want to do the rotation in loop, then add the Animated.timing in the Animated.loop

    Animated.loop(
     Animated.timing(
       this.spinValue,
       {
        toValue: 1,
        duration: 3000,
        easing: Easing.linear,
        useNativeDriver: true
       }
     )
    ).start();
    
    0 讨论(0)
提交回复
热议问题