GestureTrigger
는 썸네일과 같은 트리거 요소에서 전체 모달 뷰로의 원활한 전환을 생성하는 부드러운 트리거 기반 애니메이션을 지원합니다. 이 기능은 트리거와 모달 콘텐츠 간의 시각적 연속성을 유지하여 사용자 경험을 향상시킵니다.
GestureTrigger
컴포넌트는 누를 수 있는 요소를 감싸고 부드러운 모달 전환을 위해 해당 위치를 등록합니다.
GestureTrigger
는 자동으로 하위 컴포넌트에 press 핸들러를 주입합니다onPress
prop 지원)GestureTrigger
와 하위 요소 모두에 onPress
가 있는 경우, 둘 다 호출됩니다 (하위 요소의 핸들러가 먼저 호출됨)지원되는 하위 컴포넌트
다음과 같은 press 가능한 컴포넌트를 하위 요소로 사용할 수 있습니다:
Pressable
TouchableOpacity
TouchableHighlight
Button
onPress
prop를 가지고 있는 컴포넌트 및 커스텀 컴포넌트다양한 컴포넌트 예시
triggerAnimation
prop을 사용하여 트리거 애니메이션 동작을 사용자 정의할 수 있습니다:
다른 ID를 사용하여 여러 트리거 인스턴스를 가질 수 있습니다:
애니메이션이 제대로 작동하려면 GestureTrigger
와 GestureViewer
컴포넌트 간에 id
prop이 일치해야 합니다. (기본값: default
)
onDismissStart
콜백은 닫기 애니메이션이 시작될 때 즉시 트리거되며, 애니메이션이 완료되기 전에 사라져야 하는 UI 요소를 숨기는 데 유용합니다.
renderContainer
의 dismiss
헬퍼를 사용하여 프로그래밍 방식으로 뷰어를 닫을 수 있습니다:
renderContainer
의 dismiss
를 사용하는 이유
트리거 기반 애니메이션을 사용할 때는 setVisible(false)
로 직접 제어하는 대신 renderContainer
가 제공하는 dismiss
메서드를 사용하는 것이 중요합니다. 그 이유는 다음과 같습니다:
작동 방식:
dismiss
가 호출되면 뷰어가 원래 트리거 위치로 애니메이션되며 돌아갑니다onDismissStart
가 호출됩니다onDismiss
가 호출됩니다dismiss
는 간단한 닫기로 작동합니다트리거 기반 애니메이션을 사용할 때, 닫기 애니메이션은 원래 트리거 위치로 돌아갑니다. onDismissStart
콜백은 이 애니메이션이 시작될 때 호출되므로, 닫기 애니메이션 중에 표시되지 않아야 하는 UI 요소를 숨길 수 있습니다.
이 패턴은 다음과 같은 사용자 경험을 보장합니다:
renderContainer
의 dismiss
메서드를 사용하세요onDismissStart
를 사용하여 숨기세요onDismiss
에 배치하세요이 패턴은 트리거 기반 애니메이션이 일관되게 작동하도록 하며 최상의 사용자 경험을 제공합니다.
속성 | 타입 | 기본값 | 설명 |
---|---|---|---|
duration | number | 300 | 밀리초 단위의 애니메이션 지속 시간 |
easing | EasingFunction | Easing.bezier(0.25, 0.1, 0.25, 1.0) | 애니메이션을 위한 이징 함수 |
reduceMotion | ReduceMotion | undefined | 시스템 감소 모션 설정 준수 여부 |
onAnimationComplete | () => void | undefined | 애니메이션이 완료될 때 호출되는 콜백 |
트리거 애니메이션은 누를 때 트리거 요소의 위치를 측정하고 해당 위치에서 전체 화면으로 모달을 애니메이션하는 방식으로 작동합니다.