问题
我正在尝试使用 Reanimated v2 创建此动画:
这是当前的实现:
const opacity1 = useSharedValue(0);
const opacity2 = useSharedValue(0);
const opacity3 = useSharedValue(0);
useEffect(() => {
const duration = 600;
const timingOptions = { duration: duration };
const pulse = withTiming(1, timingOptions);
const repeated = withRepeat(pulse, -1, true);
opacity1.value = repeated;
// *
opacity2.value = withDelay(duration / 2, repeated);
// *
opacity3.value = withDelay(duration, repeated);
}, []);
问题是,在我标记代码的// *
地方似乎有一些随机延迟(可能是由于 JS 执行),导致三个点有时最终同步(具有相同的不透明度)。
我认为问题在于更新这 3 个值不是原子的,因此在这些分配之间可能发生任何事情。
解决这个问题并让这 3 个共享值彼此之间具有确定性延迟的最佳方法是什么?
我尝试了什么?
- 我尝试使用 1
useSharedValue
和 2useDerivedValue
s,但数学让一个从 0 开始,一个从 0.5 开始,一个从 1 开始是不平凡的(只需在彼此之间添加 0.5 并将其(%)调制为 1 不” t 计算withRepeat
达到 1) 后的返回 - 我尝试使用 a
useSharedValue([0, 0, 0])
然后使用原子操作对其进行更新,但这似乎不受支持