태그
목차

애니메이션

react-native-reanimated 라이브러리를 Expo 프로젝트에서 사용하는 방법을 알아본다.

생성일: 2024-04-12

수정일: 2024-04-12

애니메이션은 사용자 경험을 향상시키고 개선하는 좋은 방법이다. Expo 프로젝트에서는 React Native의 Animated API를 사용할 수 있다. 하지만 더 나은 성능으로 고급 애니메이션을 사용하고 싶다면 react-native-reanimated 라이브러리를 사용한다. 이 라이브러리는 부드럽고 강력하며 유지보수 가능한 애니메이션을 만드는 과정을 단순화하는 API를 제공한다.

설치

다음 명령을 실행하여 react-native-reanimated 를 설치한다

npx expo install react-native-reanimated

SDK 50 이상에서는 추가 설정이 필요하지 않다. 라이브러리를 설치하면 babel-expo-preset 에서 Reanimated Babel 플러그인이 자동으로 설정된다.

웹 지원

SDK 50 이상에서 react-native-reanimated 를 사용할 때는 추가 설정이 필요하지 않다.

기본 예제

다음 예제는 react-native-reanimated 라이브러리를 사용하여 간단한 애니메이션을 만드는 방법을 보여준다. API와 사용법에 대한 자세한 내용은 react-native-reanimated 문서를 참조한다.

import Animated, {
  useSharedValue,
  withTiming,
  useAnimatedStyle,
  Easing,
} from 'react-native-reanimated';
import { View, Button, StyleSheet } from 'react-native';

export default function AnimatedStyleUpdateExample() {
  const randomWidth = useSharedValue(10);

  const config = {
    duration: 500,
    easing: Easing.bezier(0.5, 0.01, 0, 1),
  };

  const style = useAnimatedStyle(() => {
    return {
      width: withTiming(randomWidth.value, config),
    };
  });

  return (
    <View style={styles.container}>
      <Animated.View style={[styles.box, style]} />
      <Button
        title="toggle"
        onPress={() => {
          randomWidth.value = Math.random() * 350;
        }}
      />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
  box: {
    width: 100,
    height: 80,
    backgroundColor: 'black',
    margin: 30,
  },
});

이 예제에서는 useSharedValue 를 사용하여 애니메이션의 상태를 관리하고, useAnimatedStyle 을 사용하여 이 상태에 따라 동적으로 스타일을 업데이트한다. 버튼을 누르면 randomWidth 값이 변경되고, 이에 따라 박스의 너비가 애니메이션된다.

다른 애니메이션 라이브러리

Moti 와 같은 다른 애니메이션 패키지도 있다.