회사에서 어플에 랜딩 페이지 애니메이션이 있으면 좋겠다는 기능 요구가 발생했다. 그러니까, 웹뷰를 보여주기 전에 잠깐 서비스에 대한 멋드러진 소개가 필요하다는건데....
기능에 대해 들었을때는 'useState와 setTimeout으로 일단 틀 잡기는 쉽겠네?' 라는 생각을 했다
// App.jsx
export default function App() {
const [showLanding, setShowLanding] = useState(true);
useEffect(() => {
setTimeout(() => {
setShowLanding(false);
}, 3000);
}, []);
if (showLanding) {
return <Landing setShowLanding={setShowLanding} />;
}
return (
<View style={styles.container}>
<WebView
source={{ uri: "서비스" }}
/>
</View>
);
}
// App.jsx
export default function App() {
// useEffect, setTimeout 로직 삭제
}
// Landing.jsx
import { View, Animated, ImageBackground, Text, StyleSheet } from "react-native";
import LandingImg from "넣을 이미지.jpg";
const AnimatedImageBackground =
Animated.createAnimatedComponent(ImageBackground);
export default function Landing({ setShowLanding }) {
const moveAnim = useRef(new Animated.Value(0)).current;
useEffect(() => {
Animated.timing(moveAnim, {
toValue: 1,
duration: 3500,
useNativeDriver: false,
}).start(() => setShowLanding(false));
}, []);
const movingBackground = moveAnim.interpolate({
inputRange: [0, 1],
outputRange: ['0%', '-40%']
});
return (
<View style={{ flex: 1 }}>
<AnimatedImageBackground
source={LandingImg}
style={{
width: '120%',
height: '120%',
position: 'absolute',
left: movingBackground
}}
resizeMode="cover"
/>
<View style={styles.textContainer}>
<Text style={[styles.textBase, styles.text1]}>텍스트 1</Text>
</View>
</View>
);
}