Часы нарисованы внутри корпуса Apple Watch Ultra 2: рамка сделана на React Native SVG, а экран точно совпадает с вырезом дисплея и масштабируется вместе с корпусом от одного size. Проп face переключает два циферблата — цифровой с перетекающими сегментами и кольцом секунд или стрелочный с часовой, минутной и плавной секундной стрелкой, датой, шагами и зарядом. frame={false} возвращает прежний корпус без рамки. Живое время обновляется раз в секунду таймером на JS, а сегменты, двоеточие, кольцо и стрелки анимируются на UI-потоке. Передайте time, чтобы заморозить или вести часы вручную — тогда таймер не запускается. Корпус, стрелки и кольцо нарисованы через View и React Native SVG, поэтому одинаково работают на iOS, Android и в вебе.
Поставьте зависимости:
npm install expo-status-bar react-native-reanimated react-native-svgpnpm add expo-status-bar react-native-reanimated react-native-svgyarn add expo-status-bar react-native-reanimated react-native-svgbun add expo-status-bar react-native-reanimated react-native-svgСкопируйте эти файлы в src/shared/components/organisms/watch-face/:
Код доступен по подпискеPro
Исходник «Циферблат» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Циферблат» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
time?Тип Date
face?Тип WatchFaceKind
frame?Тип boolean
format?Тип WatchFaceFormat
accent?Тип string
showSeconds?Тип boolean
theme?Тип WatchFaceTheme
size?Тип number
battery?Тип number
steps?Тип number
style?Тип StyleProp<ViewStyle>