React Native 아날로그 시계 애니메이션 구현기 (RN Animated API)
React Native + TypeScript로 “아날로그 시계(시·분·초침 + 숫자 + 센터 점)”를 직접 그려서 애니메이션까지 완성한 기록.
깃허브 커밋 타임라인을 그대로 정리하고, 핵심 구현 아이디어와 수학식을 간단히 메모.
https://github.com/heesangs/Analog-Clock-Animation
GitHub - heesangs/Analog-Clock-Animation: tutorial
tutorial. Contribute to heesangs/Analog-Clock-Animation development by creating an account on GitHub.
github.com
1) 무엇을, 왜 만들었나
- 완성 결과: 실시간 시계 애니메이션
- 시·분·초침이 현재 시간에 맞춰 부드럽게 회전
- 1~12 숫자 다이얼 표시
- 하단에 디지털 시계(AM/PM) 표기
- why? : 시간관련 앱을 기획 디자인 하고 있는데 실제 프로그래밍을 하면 얼마나 어려울지 테스트 삼아 제작해봤다.
- 함께한 AI들 : 커서(메인-클루드4.5), GPT, Gemini, Claude4.5, + 유튜브 무료 강좌 (바이브코딩 아님)
2) 결과 미리보기 (추가 예정 섹션
3) 기술 스택 & 구조
- 언어/런타임: TypeScript, React Native (CLI)
- 폴더 포인트: animation/AnalogClock.tsx 내 시계 렌더 및 애니메이션 로직 집중.
- 최종 커밋에서 Animated API 사용과 디지털 시계 상태 관리(useState) 확인.
4) 핵심 구현 아이디어
4-1. 각도 계산 (필수 수학식)
- 시침: hours % 12 기준 30° 단위 + 분 보정 0.5°/분
- 분침: 6°/분 + 초 보정 0.1°/초
- 초침: 6°/초
실제 코드에서도 같은 공식으로 hourDeg, minuteDeg, secondDeg를 계산해 Animated 값에 주입합니다.
4-2. Animated API 운용
- useRef(new Animated.Value(0))로 각 침별 회전 상태를 보관
- Animated.timing(... { duration: 500, easing: Easing.linear, useNativeDriver: true }) 로 부드럽게 갱신
- transform에 rotate: ${deg}deg`` 적용 (침 뷰에 스타일 바인딩)
- 상단 setDigitalTime으로 AM/PM 디지털 표기까지 동기 업데이트
4-3. 페이스 구성 요소
- 숫자 다이얼(1~12): 전용 렌더 함수(renderNumber) 추가 커밋으로 분리 관리.
- 센터 점(Center Dot): 별도 커밋에서 중앙 포인트 추가로 디자인 완성도 보강.
5) 커밋 내용 정리 (타임라인)
2025-10-12 — Complete analog clock
- Animated API로 시·분·초침 회전 완성, 디지털 시간(AM/PM) 표기 포함
- animation/AnalogClock.tsx 대거 업데이트(+124/-4)
2025-10-12 — Add renderNumber
- 시계 숫자(1~12) 렌더 전용 함수 추가로 페이스 가독성 향상
2025-10-11 — Add Center Dot
- 중앙 점 추가로 시각적 기준점 확보
2025-10-10 — Add analog clock animation
- Animated 기반 회전 애니메이션 초안 도입(침별 Animated.Value / rotate 적용 시작)
2025-10-10 — Initial commit
- RN CLI 템플릿으로 프로젝트 셋업(기본 App, iOS/Android 네이티브 구성)
6) 마치며 (간단 회고)
이 프로젝트는 “숫자·눈금·침을 전부 벡터로 직접 그려서 시간의 진행을 애니메이션으로 전달한다”는 점이 핵심.
Animated의 timing + rotate 조합만으로도 충분히 자연스러운 결과를 낼 수 있고, 작은 델타(분/초 보정)만 더해도 아날로그 특유의 미세한 움직임을 재현할 수 있었습니다. 다음 단계에서는 눈금 디테일과 Reanimated/Skia 기반의 매끄러운 스위핑을 시도해볼 예정.
'programing > 리액트네이티브' 카테고리의 다른 글
[R.N] 리액트 네비게이션 (0) | 2025.05.01 |
---|---|
[R.N] 숫자 맞추기 게임 (0) | 2025.03.30 |
[R.N] 기본앱(TodoList) 디자인 테스트 (0) | 2025.02.12 |
[RN.개발일지] 14. 폴더 및 파일명의 의미 정리 (1) | 2025.02.05 |
[RN.개발일지] GUIDE 문서 이해 (0) | 2024.11.12 |
댓글