Спиральная галактика с тёплым ядром, пылевыми прожилками, областями звездообразования и мерцающими звёздами на фоне туманности. Диск медленно вращается, а ведение пальцем по экрану (или курсором в вебе) плавно облетает галактику камерой: по горизонтали поворачивает диск, по вертикали меняет наклон.
Шейдер считается целиком на GPU через Skia, время и положение камеры живут на UI-потоке Reanimated — React не перерисовывается на каждом кадре. Анимация замирает, когда включено «Уменьшение движения», приложение свёрнуто или передан paused. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerpnpm add @shopify/react-native-skia react-native-reanimated react-native-gesture-handleryarn add @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerbun add @shopify/react-native-skia react-native-reanimated react-native-gesture-handlerСкопируйте эти файлы в src/shared/components/organisms/galaxy/:
Код доступен по подпискеPro
Исходник «Галактика» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Галактика» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
По умолчанию компонент занимает ширину родителя и высоту height. Чтобы растянуть его фоном на весь экран, передайте fill.
speed?Тип number
arms?Тип number
tint?Тип string
brightness?Тип number
interactive?Тип boolean
paused?Тип boolean
fill?Тип boolean
width?Тип number
height?Тип number
borderRadius?Тип number
children?Тип ReactNode
style?Тип StyleProp<ViewStyle>