Windows 애니메이션 개요

이 개요에서는 Windows 애니메이션 관리자를 소개하고 주요 구성 요소 및 개념에 중점을 둡니다. 스토리보드 및 전환에 대한 자세한 내용은 Storyboard 개요를 참조하세요.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

기본 개념

애니메이션 은 재생 시 움직임의 환상을 생성하는 연속 스틸 이미지의 시퀀스입니다. 사용자 인터페이스에서 대화형 애니메이션을 사용하면 애플리케이션에 고유한 개성을 제공할 뿐만 아니라 사용자 환경을 개선할 수 있습니다. 애니메이션은 사용자 인터페이스의 주요 상태 변경 내용을 전달하고 사용자 인터페이스의 복잡성을 관리하는 데 도움이 될 수 있습니다. 애니메이션은 애플리케이션의 품질에 대한 사용자의 인식에 추가할 수도 있습니다.

예를 들어 Windows 애니메이션은 작업 표시줄에서 파일 및 프로그램을 관리하고 액세스하는 데 도움이 되며, 사용자가 더 쉽게 볼 수 있도록 화면의 여러 부분을 확대하는 돋보기가 사용됩니다.

애니메이션의 기본 단위는 애니메이션을 적용할 시각적 요소의 특징과 시간이 지남에 따라 해당 특성이 어떻게 변하는지에 대한 설명입니다. 애플리케이션은 위치, 색, 크기, 회전, 대비 및 불투명도와 같은 다양한 특성에 애니메이션 효과를 줍니다.

Windows 애니메이션에서 애니메이션 변수 는 애니메이션 효과를 적용할 특성을 나타냅니다. 전환은 애니메이션이 발생할 때 해당 애니메이션 변수의 값이 어떻게 변하는지 설명합니다. 예를 들어 시각적 요소에는 불투명도를 지정하는 애니메이션 변수가 있을 수 있으며, 사용자 작업은 반투명에서 완전히 불투명으로 애니메이션을 나타내는 불투명도를 50에서 100으로 전환하는 전환을 생성할 수 있습니다.

스토리보드는 시간이 지남에 따라 하나 이상의 애니메이션 변수에 적용되는 전환 집합입니다. 애플리케이션은 스토리보드를 생성 및 재생한 다음 시간이 지남에 따라 애니메이션 변수의 값이 변경됨에 따라 개별 프레임 시퀀스를 그려 애니메이션을 표시합니다.

Windows 애니메이션의 구성 요소

Windows 애니메이션은 다음 구성 요소로 구성됩니다.

애니메이션 관리자

애플리케이션은 애니메이션 관리자 개체를 사용하여 애니메이션 변수 및 스토리보드를 만들고, 애니메이션을 예약 및 제어하고, 애플리케이션이 각 프레임을 그리기 전에 상태 정보를 업데이트합니다. 단일 애니메이션 관리자 개체는 일반적으로 애플리케이션에서 모든 애니메이션을 관리하므로 예약된 모든 스토리보드를 전역적으로 제어할 수 있습니다.

애니메이션 변수

애니메이션을 시작하기 전에 애플리케이션에서 애니메이션 변수 개체를 만들어야 합니다. 애니메이션 변수는 애니메이션 효과를 적용할 시각적 요소의 한 측면을 나타냅니다. 값은 정수 값으로 반올림할 수 있지만 변수는 스칼라 부동 소수점 값입니다.

애니메이션 변수는 일반적으로 애니메이션 효과를 주는 시각적 요소와 동일한 수명을 가집니다. 애니메이션 변수의 초기 값은 변수를 만들 때 지정됩니다. 그 후에는 해당 값을 직접 변경할 수 없습니다. 애니메이션 관리자를 통해 업데이트해야 합니다.

애니메이션 변수는 COM 개체에 대한 포인터와 정수 식별자를 페어링하는 태그로 식별할 수 있습니다. 애플리케이션에서 변수를 검색하는 데 태그를 사용하지 않는 한 태그는 고유할 필요가 없습니다. 기본적으로 애니메이션 변수에는 태그가 없으며 태그를 읽으려는 시도는 설정될 때까지 실패합니다.

타이밍 시스템

Windows 애니메이션에는 애니메이션이 원활하고 일관된 프레임 속도로 렌더링되도록 하는 동시에 시스템이 사용 중일 때 렌더링에 대한 시스템 리소스 사용을 줄이는 데 도움이 되는 타이밍 시스템이 포함되어 있습니다. 타이머이라고 하는 작은 시간 단위의 통과를 자동으로 표시하여 애니메이션 렌더링을 관리하는 데 도움이 됩니다. 타이밍 시스템은 틱 빈도를 동적으로 늘리거나 줄이면서 전체 시스템 렌더링 성능을 모니터링하고 애니메이션을 제한 합니다. 애플리케이션은 타이머가 애니메이션 관리자를 구동하도록 할 수 있으며 각 틱에 대해 관리자가 업데이트되기 전과 후에 알림을 받을 처리기를 등록할 수 있습니다. 애플리케이션은 타이머에 대해 허용되는 최소 애니메이션 프레임 속도를 지정할 수 있으며 애니메이션의 실제 프레임 속도가 이 속도보다 낮으면 알림을 받을 수 있습니다.

시스템 리소스를 절약하기 위해 애니메이션이 발생하지 않을 때 자체를 사용하지 않도록 타이머를 구성할 수 있습니다.

Windows 애니메이션 API

Windows 애니메이션 API는 개발자에게 다음 기능을 제공하는 단일 스레드 COM 기반 API입니다.

  • 애니메이션 개체를 만들고 애니메이션을 제어하기 위한 애니메이션 관리자 개체 UIAnimationManager
  • 애니메이션 변수 및 스토리보드
  • 즉시 사용할 수 있는 전환의 기본 라이브러리인 UIAnimationTransitionLibrary
  • 현재 시간을 결정하고 필요에 따라 애니메이션을 구동하기 위한 타이머 개체 UIAnimationTimer
  • 애니메이션의 상태 및 진행률을 모니터링하기 위한 이벤트 후크

전체 API 참조는 Windows 애니메이션 참조를 참조하세요. 예제 코드는 Windows 애니메이션 작업Windows 애니메이션 샘플을 참조하세요.

구성

애플리케이션은 새 애니메이션을 예약하기 전에 현재 시간을 가져와야 합니다. 다음은 Windows 애니메이션에서 지원하는 타이밍 메커니즘입니다.

Application-Driven 애니메이션

하드웨어 가속 그래픽 API를 사용하는 애플리케이션은 모니터 새로 고침 속도와 동기화하여 부드러운 애니메이션을 렌더링할 수 있습니다. 또는 애플리케이션은 자체의 타이밍 메커니즘을 사용하여 애니메이션의 각 프레임을 그릴 시기를 결정할 수 있습니다. 두 경우 모두 애플리케이션은 애니메이션 관리자에게 상태를 업데이트할 시기를 알려줍니다. 애니메이션 타이머를 사용하여 애니메이션 관리자에 필요한 단위로 높은 정밀도로 현재 시간을 확인할 수 있습니다.

다음 다이어그램은 애플리케이션이 애니메이션 업데이트를 직접 구동할 때 애플리케이션과 Windows 애니메이션 구성 요소 간의 상호 작용을 보여 줍니다.

애플리케이션이 애니메이션 업데이트를 직접 구동할 때 애플리케이션과 Windows 애니메이션 구성 요소 간의 상호 작용을 보여 주는 다이어그램

가장 간단한 구성에서 애플리케이션은 애니메이션이 재생되지 않는 경우에도 화면을 새로 고칠 때마다 모든 것을 다시 그리게 됩니다. 작업 낭비를 방지하기 위해 애플리케이션은 예약된 애니메이션이 있을 때 알림을 받을 관리자 이벤트 처리기를 등록하고 다시 그리기를 중지할 수 있도록 일정이 비어 있는 시기를 감지할 수 있습니다.

Timer-Driven 애니메이션

애플리케이션은 애니메이션 관리자를 직접 업데이트하는 대신 애니메이션 타이머가 애니메이션 관리자에게 상태를 업데이트할 시기를 알리고 각 업데이트가 수행되었을 때 알림을 받을 수 있습니다. 이 방법은 이전 그래픽 API에 권장됩니다. 일반적으로 모니터 새로 고침 빈도와 동기화할 수 있는 경우 이를 수행하고 애플리케이션 기반 애니메이션을 사용하는 것이 좋습니다.

다음 다이어그램은 애니메이션 타이머가 애니메이션 업데이트를 구동할 때 애플리케이션과 Windows 애니메이션 구성 요소 간의 상호 작용을 보여 줍니다.

애니메이션 타이머가 애니메이션 업데이트를 구동할 때 애플리케이션과 Windows 애니메이션 구성 요소 간의 상호 작용을 보여 주는 다이어그램

타이머는 애니메이션이 예약된 경우에만 실행되도록 구성할 수 있습니다. 이렇게 하는 것은 타이머 및 애니메이션 관리자가 연결되면 특정 매개 변수를 전달하는 간단한 문제입니다.

고급 기능

애니메이션을 지원하기 위한 기본 기반 외에도 Windows 애니메이션에는 다음을 비롯한 여러 고급 애니메이션 기술에 대한 지원이 포함되어 있습니다.

컨텍스트에 민감한 기간

전환 기간을 수정할 필요가 없습니다. 전환이 시작될 때 애니메이션 변수의 값과 속도에 따라 확인할 수 있습니다.

속도 일치

움직이는 개체의 위치와 속도가 값 간에 즉각적으로 점프하지 않으면 일반적으로 움직임이 눈에 더 좋습니다. 새 스토리보드가 현재 재생 중인 스토리보드를 중단하면 속도 일치를 통해 새 스토리보드가 이전 스토리보드가 종료된 위치를 원활하게 선택할 수 있습니다.

경합 관리

두 스토리보드가 동일한 애니메이션 변수를 동시에 업데이트해야 하는 경우 일정 충돌이 발생합니다. Windows 애니메이션을 사용하면 각 스토리보드에 특정 숫자 우선 순위를 요구하는 대신 애플리케이션에서 두 스토리보드의 상대적 우선 순위를 결정할 수 있습니다.

경합 관리

개발자는 우선 순위 비교 콜백을 구현하여 예약 중인 스토리보드의 우선 순위와 이미 일정에 있는 스토리보드를 비교할 수 있습니다. 우선 순위 비교를 구현하는 애플리케이션은 기본 설정 논리를 사용하여 스토리보드가 다른 를 선점하는 시기를 결정할 수 있습니다. 예약 충돌을 resolve 위해 Windows 애니메이션은 애플리케이션에 다음 순서대로 수행할 수 있는 작업을 요청합니다.

  • 예약된 스토리보드를 취소합니다. 예약된 스토리보드가 아직 재생되지 않은 경우 취소되어 일정에서 즉시 제거될 수 있습니다.
  • 예약된 스토리보드를 잘라냅니다. 새 스토리보드가 예약된 스토리보드를 자르면 새 스토리보드가 애니메이션 효과를 주는 즉시 예약된 스토리보드가 변수에 영향을 미치지 않습니다. 속도가 일치하므로 새 스토리보드가 이전 스토리보드가 중단된 위치에서 원활하게 선택할 수 있습니다.
  • 예약된 스토리보드를 마무리합니다. 스토리보드는 무기한 반복되는 루프가 포함된 경우에만 종료될 수 있습니다. 스토리보드가 종료될 때 이러한 루프에 있으면 현재 반복이 완료되고 나머지 스토리보드가 재생됩니다. 스토리보드가 종료될 때 루프가 아직 시작되지 않은 경우 루프는 완전히 건너뜁히게 됩니다.
  • 예약된 스토리보드를 압축합니다. 예약된 스토리보드를 자르거나 취소하는 옵션이 아닌 경우 스토리보드를 완료할 수 있습니다. Windows 애니메이션에서는 예약된 스토리보드(및 예약된 스토리보드)에 사용할 수 있는 시간을 압축하여 변수가 최종 상태에 더 빨리 도달할 수 있도록 합니다. 압축이 적용되면 영향을 받는 스토리보드에 대한 시간이 일시적으로 가속화되므로 더 빠르게 재생됩니다.

등록된 우선 순위 비교 개체에서 위의 작업을 허용하지 않으면 새 스토리보드를 예약하려는 시도가 실패합니다. 기본적으로 모든 스토리보드는 오류를 방지하기 위해 트리밍, 종료 또는 압축할 수 있지만 취소할 수는 없습니다.

다음 다이어그램은 UI_ANIMATION_STORYBOARD_STATUS 열거형에 정의된 상태를 사용하여 스토리보드의 수명 주기를 보여 줍니다. 애플리케이션은 Windows 애니메이션 API를 사용하여 스토리보드를 빌드하고 예약을 위해 제출합니다. 애니메이션 관리자는 스토리보드를 예약하고 애니메이션을 관리합니다.

애니메이션 관리자가 스토리보드를 예약하고 애니메이션을 관리하는 방법을 보여 주는 다이어그램

스토리보드 예약 및 관리에 대한 자세한 내용은 Storyboard 개요를 참조하세요.

Windows 애니메이션 참조

Windows 애니메이션 샘플

Windows 애니메이션 작업