트리거 기반 모달 애니메이션
GestureTrigger는 썸네일과 같은 트리거 요소에서 전체 모달 뷰로의 원활한 전환을 생성하는 부드러운 트리거 기반 애니메이션을 지원합니다. 이 기능은 트리거와 모달 콘텐츠 간의 시각적 연속성을 유지하여 사용자 경험을 향상시킵니다.
GestureTrigger 사용법
GestureTrigger 컴포넌트는 누를 수 있는 요소를 감싸고 부드러운 모달 전환을 위해 해당 위치를 등록합니다.
1. GestureTrigger에 onPress 사용 (권장)
2. 하위 요소에 onPress 사용
- 두 방법은 기능적으로 동일합니다
GestureTrigger는 자동으로 하위 컴포넌트에 press 핸들러를 주입합니다- 하위 컴포넌트는 반드시 press 가능해야 합니다 (
onPressprop 지원) GestureTrigger와 하위 요소 모두에onPress가 있는 경우, 둘 다 호출됩니다 (하위 요소의 핸들러가 먼저 호출됨)
지원되는 하위 컴포넌트
다음과 같은 press 가능한 컴포넌트를 하위 요소로 사용할 수 있습니다:
PressableTouchableOpacityTouchableHighlightButtononPressprop를 가지고 있는 컴포넌트 및 커스텀 컴포넌트
다양한 컴포넌트 예시
애니메이션 구성
triggerAnimation prop을 사용하여 트리거 애니메이션 동작을 사용자 정의할 수 있습니다:
다중 트리거 인스턴스
다른 ID를 사용하여 여러 트리거 인스턴스를 가질 수 있습니다:
애니메이션이 제대로 작동하려면 GestureTrigger와 GestureViewer 컴포넌트 간에 id prop이 일치해야 합니다. (기본값: default)
닫기 애니메이션 처리
onDismissStart 콜백
onDismissStart 콜백은 닫기 애니메이션이 시작될 때 즉시 트리거되며, 애니메이션이 완료되기 전에 사라져야 하는 UI 요소를 숨기는 데 유용합니다.
커스텀 컴포넌트에서 닫기
renderContainer의 dismiss 헬퍼를 사용하여 프로그래밍 방식으로 뷰어를 닫을 수 있습니다:
renderContainer의 dismiss를 사용하는 이유
트리거 기반 애니메이션을 사용할 때는 setVisible(false)로 직접 제어하는 대신 renderContainer가 제공하는 dismiss 메서드를 사용하는 것이 중요합니다. 그 이유는 다음과 같습니다:
작동 방식:
- 트리거 애니메이션 사용 시:
dismiss가 호출되면 뷰어가 원래 트리거 위치로 애니메이션되며 돌아갑니다- 애니메이션 시작 시
onDismissStart가 호출됩니다 - 애니메이션 완료 후
onDismiss가 호출됩니다
- 트리거 애니메이션 없이 사용 시:
- 트리거 애니메이션이 구성되지 않은 경우에도
dismiss는 간단한 닫기로 작동합니다
- 트리거 애니메이션이 구성되지 않은 경우에도
닫기 처리 완전한 예제
트리거 애니메이션과 함께하는 닫기 동작
트리거 기반 애니메이션을 사용할 때, 닫기 애니메이션은 원래 트리거 위치로 돌아갑니다. onDismissStart 콜백은 이 애니메이션이 시작될 때 호출되므로, 닫기 애니메이션 중에 표시되지 않아야 하는 UI 요소를 숨길 수 있습니다.
이 패턴은 다음과 같은 사용자 경험을 보장합니다:
- 닫기가 시작되면 즉시 UI 요소를 숨깁니다
- 닫기 애니메이션이 자연스럽게 완료되도록 합니다
- 애니메이션이 완전히 완료된 후에만 리소스를 정리합니다
모범 사례
- 애니메이션과 함께 뷰어를 닫으려면 항상
renderContainer의dismiss메서드를 사용하세요 - 닫기 애니메이션 중에 표시되지 않아야 하는 UI 요소는
onDismissStart를 사용하여 숨기세요 - 애니메이션 완료 후에 실행되어야 하는 정리 작업은
onDismiss에 배치하세요
흔히 하는 실수
이 패턴은 트리거 기반 애니메이션이 일관되게 작동하도록 하며 최상의 사용자 경험을 제공합니다.
API 참조
GestureTrigger Props
TriggerAnimation 구성
트리거 애니메이션은 누를 때 트리거 요소의 위치를 측정하고 해당 위치에서 전체 화면으로 모달을 애니메이션하는 방식으로 작동합니다.
