因此,我使用React Native Reanimated
制作了一个动画,它每3秒重复一次并更新SharedValue
。我使用setInterval
实现了它,如下所示。
const SomeThreshold = 5;
useEffect(() => {
progress.value = 0;
const interval = setInterval(() => {
if (progress.value === SomeThreshold) {
progress.value = 0;
return;
}
progress.value = withTiming(progress.value + 1, {
duration: 2000,
});
}, 3000);
return () => clearInterval(interval);
}, []);
我想要达到的是
- 〉动画开始
- 〉进展= 1
- 〉进展= 2
- 〉进展= 3
- 〉进展= 4
- 〉进展= 5
- 〉进展= 1
- 〉进展= 2
而且这个过程会无限延续下去。
有没有什么方法可以不使用像setInterval这样的Web API,也可以不使用withRepeat
来实现它?
1条答案
按热度按时间nwwlzxa71#
您应该能够使用以下各项的组合:
withRepeat
,一个Reanimated函数,用于将动画重复指定的次数或无限次:在你的例子中,使用-1,无穷大。withSequence
,另一个Reanimated函数,按顺序运行提供的动画:对你来说是从1到5这将是(从the discussion):
其思想是使用
Array(SomeThreshold).fill(0).map((_, i) => withTiming(i + 1, {duration: 3000}))
创建一个withTiming
动画数组,该数组将进度值从1更新为SomeThreshold
,每次更新需要3秒。.map((_, i) => withTiming(i + 1, {duration: 3000}))
部分Map到数组,并为每个元素创建一个withTiming
动画,将进度值更新为i + 1
。再加上
withRepeat(withSequence(...), -1)
,这将无限重复。withSequence
接受2个参数: