Карта, закрытая слоем серебряной или золотой фольги с зерном и царапинами. Фольгу стирают пальцем мягкой кистью; когда стёрта примерно половина, остаток растворяется и карта открывается целиком. Долгое нажатие без движения открывает карту сразу, кругом из точки касания, а проп revealed открывает и закрывает её из кода.
Фольга и маска стирания рисуются в Skia, штрих собирается на UI-потоке и не перерисовывает React, доля стёртого считается по сетке 24×24. При «Уменьшении движения» карта открывается и закрывается без анимации. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @shopify/react-native-skia expo-blur react-native-gesture-handler react-native-reanimated react-native-svg react-native-workletspnpm add @shopify/react-native-skia expo-blur react-native-gesture-handler react-native-reanimated react-native-svg react-native-workletsyarn add @shopify/react-native-skia expo-blur react-native-gesture-handler react-native-reanimated react-native-svg react-native-workletsbun add @shopify/react-native-skia expo-blur react-native-gesture-handler react-native-reanimated react-native-svg react-native-workletsСкопируйте эти файлы в src/shared/components/organisms/scratch-card/:
Код доступен по подпискеPro
Исходник «Скретч-карта» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Скретч-карта» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Под фольгу кладётся любое содержимое через children; onRevealChange сообщает, что карта открылась или снова закрылась.
childrenТип React.ReactNode
label?Тип string
foil?Тип Foil
revealed?Тип boolean
onRevealChange?Тип (revealed: boolean) => void
resetDelay?Тип number
resetDuration?Тип number
holdDuration?Тип number
hint?Тип string | false
style?Тип StyleProp<ViewStyle>