๐๋ ธ๋ง๋์ฝ๋์ React Native ๋ง์คํฐํด๋์ค Part4 ANIMATIONS AND INTERACTIONS ๊ฐ์๋ฅผ ๋ฃ๊ณ ์๋ค. PanResponder ๋ผ๋ React Native API ๋ฅผ ๊ณต๋ถํ๋๋ฐ ์ข๋ ์์ธํ ์๊ณ ์ถ์ด์ ๊ณต์๋ฌธ์๋ฅผ ์ดํด๋ณด๋ คํ๋ค!
๊ณต์๋ฌธ์์ ์ค๋ช ๋์ด์๋๊ฒ์ ๊ทธ๋๋ก ๋ฒ์ญํ๊ฒ์ธ๋ฐ.. ์กฐ๊ธ ์ด๋ ต ๊ทธ๋์.. ๋๋์ฒด ์ด๊ฒ ๋ญ๋๊ตฌใ ใ
I think..ํฐ์น ๋ฐ ์ ์ค์ฒ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋งํ ์ ์๋ ์น๊ตฌ๐โโ๏ธ ์ธ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ํฌ๊ดํด์ ํฐ์น๋ผ๊ณ ํํํ๊ฒ ๋ค.
import React, {useRef} from "react";
import {Animated, PanResponder} from "react-native";
import styled from "styled-components/native"
const Container = styled.View`
flex:1;
justify-content:center;
align-items:center;
`
const Box = styled.View`
background-color:tomato;
height:200px;
width:200px;
`
const AnimatedBox = Animated.createAnimatedComponent(Box)
export default function App(){
const POSITION = useRef(
new Animated.ValueXY({
x:0,
y:0,
}),
).current
const panResponder = useRef(
PanResponder.create({
//ํฐ์น ์ด๋ฒคํธ ์ฌ์ดํด์ ์ ๊ทผํ ์ ์๋ ํจ์๋ค์ ์ถ๊ฐ
})
).current
return (
<Container>
<AnimatedBox
{...panResponder.panHandlers}
style={{
transform:POSITION.getTranslateTransform()
}}
/>
</Container>
)
const panResponder = useRef(
PanResponder.create({
//ํฐ์น ์ด๋ฒคํธ ์ฌ์ดํด์ ์ ๊ทผํ ์ ์๋ ํจ์๋ค์ ์ถ๊ฐ
})
).current
PanResponder๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ console.log(panResponder)์ ๋ณด๋ฉด ์์ panHandlers๊ฐ ๋ค์ด์๋๋ฐ handlers์์ ๋ค์ด์๋ ํจ์๋ค์ ์ด์ฉํด์ ํฐ์น ์ ๋ณด๋ค์ ์ ๊ทผ ํ ์ ์๋ค!
return (
<Container>
<AnimatedBox
{...panResponder.panHandlers}
style={{
transform:POSITION.getTranslateTransform()
}}
/>
</Container>
)
ํฐ์น ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋งํ๊ณ ์ถ์ View์ handlers๋ฅผ ๊ฒฐํฉ์์ผ ์ค๋ค.
panHandlers๋ฅผ ๊น๋ณด๋ฉด ์ฌ๋ฌ ํจ์๋ค์ด ๋ค์ด์๋ค.
onStartShouldSetPanResponder:(evt, gestureState)=>true,
onStartShouldSetPanResponderCapture:(evt, gestureState) => true,
onMoveShouldSetPanResponder:(evt, gestureState)=> true,
onMoveShouldSetPanResponderCapture:(evt, gestureState)=> true,
์ฃผ์ด์ง ํฐ์น ์ด๋ฒคํธ์ ์๋ต ํ ๊ฒ์ธ๊ฐ ๋ง๊ฒ์ธ๊ฐ. ๊ฒฐ์ ํ๋ ํจ์์ธ๋ฐ ๋ฆฌํด์ true ๋ผ๊ณ ํด์ฃผ๋ฉด ์ ์ค์ฒ ์ด๋ฒคํธ ๊ฐ์ง๋ฅผ ์์ํ๋ค. ์ ํจ์4๊ฐ๊ฐ ๊ฐ์ ์ฉ๋๋ก ์ฐ์ด๋๊ฒ ๊ฐ์๋ฐ ๊ฐ๊ฐ์ ์ฐจ์ด์ ์ ํ์ ํ์ง ๋ชปํ๋ค..
onPanResponderGrant:(evt, gestureState) => {
}
ํฐ์น ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ํธ์ถ๋๋ ํจ์
onPanResponderMove:(evt, gestureState) => {
}
ํฐ์น ์ด๋ฒคํธ๊ฐ ์งํ ์ค์ผ ๋ ํธ์ถ ๋๋ ํจ์ (์์ง์ด๋ ๋์ ๊ณ~ ์ ํธ์ถ๋จ)
onPanResponderRelease:(evt, gestureState) => {
}
ํฐ์น ์ด๋ฒคํธ๊ฐ ๋๋ฌ์ ๋ ํธ์ถ ๋๋ ํจ์(์๋๋๊น ํธ์ถ๋จ)
์ฐธ๊ณ ๋ก ๋๋ onStartShouldSetPanResponder,onPanResponderGrant,onPanResponderMove,onPanResponderRelease ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํด ๋ณด์๋ค.
gestureState๋ฅผ ๊น๋ณด๋ฉด ์๋์ ๊ฐ์ ์ ๋ณด๋ค์ด ๋ค์ด์๋ค.
moveX = x0 + dx
moveY = y0 + dy
์ผ์ ์ด๋ ต๋ค! ๊ณ์ ๊ณต๋ถํด๋ณด์!!