Логотип растеризуется в поле расстояний, и шейдер Skia рисует вокруг него раскалённое ядро, мягкий ореол, игольчатые лучи с бегущими искрами и лепестки поверх плёночного зерна. При появлении вспышка разгорается за несколько секунд, а затем медленно пульсирует. По умолчанию светится знак Astra, собранный из векторного контура; через src можно передать своё растровое изображение.
Свет слегка наклоняется вслед за пальцем, а на вебе — за курсором. Шейдер считается целиком на GPU, время идёт на UI-потоке Reanimated, поэтому React не перерисовывается на каждом кадре. Анимация замирает, когда включено «Уменьшение движения» или приложение свёрнуто, — тогда вспышка показывается в конечном состоянии. Работает на 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/logo-flare/:
Код доступен по подпискеPro
Исходник «Блик по логотипу» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Блик по логотипу» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Компонент растягивается на весь родитель. Цвет свечения tint задаётся тройкой RGB от 0 до 1, а center — смещением от центра кадра в долях его высоты.
src?Тип LogoFlareSource
center?Тип readonly [number, number]
size?Тип number
tint?Тип readonly [number, number, number]
clearCenter?Тип boolean
paper?Тип boolean
speed?Тип number
intro?Тип boolean
play?Тип boolean
interactive?Тип boolean
style?Тип StyleProp<ViewStyle>