Вы можете разделить SVG на два компонента: компонент стрелки, который является статической частью SVG, и компонент Fan
- анимированная часть.Затем просто оберните компонент Fan
с Animated.View
и передайте вам анимацию:
<View>
<SVG />
<Animated.View style={animatedStyle}>
<Fan />
</Animated.View>
</View>
Анимированный компонент будет помещен в «обернутый» и будет также отображать свойства анимации:
const interpolateRotation = this.animatedValue.interpolate({
inputRange: [0, 1],
outputRange: ['360deg', '0deg'],
});
const animatedStyle = {
position: 'absolute',
top: 0,
left: 0,
transform: [
{ rotate: interpolateRotation }
]
}
Наконец, самая простая часть - это подготовить анимацию и запустить ее:
animatedValue = new Animated.Value(1);
componentDidMount() {
this.startAnimation();
}
startAnimation = () => {
this.animatedValue.setValue(0);
Animated.timing(this.animatedValue, {
toValue: 1,
duration: 1500,
easing: Easing.linear,
}).start(() => this.startAnimation())
}
Я создал рабочую демонстрацию здесь .