Линии тока настоящего потенциального потока огибают невидимое крыло в центре кадра, где удобно поставить заголовок. По линиям бегут дымные импульсы, а за крылом тянется турбулентный след. Размер крыла подстраивается под пропорции поверхности автоматически, но его можно задать пропом wing.
Поток целиком считается шейдером Skia на GPU, время идёт на UI-потоке Reanimated без перерисовок React. Анимация замирает при «Уменьшении движения», в фоне, при paused или (в вебе) вне экрана. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @shopify/react-native-skia react-native-reanimatedpnpm add @shopify/react-native-skia react-native-reanimatedyarn add @shopify/react-native-skia react-native-reanimatedbun add @shopify/react-native-skia react-native-reanimatedСкопируйте эти файлы в src/shared/components/organisms/wind-tunnel/:
Код доступен по подпискеPro
Исходник «Аэротруба» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Аэротруба» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Заголовок можно передать через children — он ляжет поверх потока. Цвета принимают строку или тройку RGB от 0 до 1.
speed?Тип number
wing?Тип readonly [number, number]
density?Тип number
lineColor?Тип ShaderColor
topColor?Тип ShaderColor
bottomColor?Тип ShaderColor
glow?Тип number
paused?Тип boolean
children?Тип ReactNode
style?Тип StyleProp<ViewStyle>