React Native Gesture Handler: Swipe ve Drag Animasyonları
React Native'de dokunma hareketlerini (swipe, drag) yakalamak ve animasyonlarla birleştirmek standart touch API'den çok daha güvenilir. Gesture Handler kütüphanesi tam bu işe yarıyor.
Projeye kütüphaneyi ekleyelim:
1npm install react-native-gesture-handler react-native-reanimatedTemel bir swipe ve drag örneği şu şekilde çalışır. Kullanıcı ekranda parmağını sürüklediğinde kutu hareket eder, swipe yapınca hızlı bir animasyon oynatılır:
1import React from 'react';2import { View, StyleSheet } from 'react-native';3import {4GestureHandlerRootView,5PanGestureHandler,6} from 'react-native-gesture-handler';7import Animated, {8useSharedValue,9useAnimatedStyle,10withSpring,11runOnJS,12} from 'react-native-reanimated';1314const SwipeDragExample = () => {15const translateX = useSharedValue(0);16const translateY = useSharedValue(0);1718const onGestureEvent = (event) => {19translateX.value = event.nativeEvent.translationX;20translateY.value = event.nativeEvent.translationY;21};2223const onGestureEnd = (event) => {24// Swipe hızı 500'den fazlaysa snap et25if (Math.abs(event.nativeEvent.velocityX) > 500) {26translateX.value = withSpring(27event.nativeEvent.velocityX > 0? 150: -15028);29} else {30// Yavaş hareket ise orijinal yere dön31translateX.value = withSpring(0);32}33translateY.value = withSpring(0);34};3536const animatedStyle = useAnimatedStyle(() => ({37transform: [38{ translateX: translateX.value },39{ translateY: translateY.value },40],41}));4243return (44<GestureHandlerRootView style={styles.container}>45<PanGestureHandler46onGestureEvent={onGestureEvent}47onEnded={onGestureEnd}48>49<Animated.View style={[styles.box, animatedStyle]} />50</PanGestureHandler>51</GestureHandlerRootView>52);53};5455const styles = StyleSheet.create({56container: {57flex: 1,58justifyContent: 'center',59alignItems: 'center',60backgroundColor: '#f5f5f5',61},62box: {63width: 80,64height: 80,65backgroundColor: '#007AFF',66borderRadius: 10,67},68});6970export default SwipeDragExample;Bu kodda PanGestureHandler kullanıcının parmağını takip eder. translationX ve translationY değerleri gerçek zamanlı güncellenir. onGestureEnd içinde hızı kontrol ediyoruz: eğer hızlı swipe ise kutu yana fırlar, yavaşsa geri döner.
Önemli bir nokta: GestureHandlerRootView uygulamanın köküne sarılması gerekir, yoksa gesture'lar çalışmaz. Ayrıca withSpring() animasyonu doğal bir yay etkisi verir; withTiming() kullanabilirsin ama spring daha akıcı hissettirir.
bknz: Flutter ve React Native'de Push Notification: Kurulum ve İlk Mesaj
Sık yapılan hata: gesture handler'ı ekrana tüm ekran boyutu vermemek. Eğer kutu hareket etmiyorsa, PanGestureHandler etrafındaki View'ın flex: 1 olduğundan emin ol.
0 yorum