이 개요에서는 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 애니메이션을 사용하면 각 스토리보드에 특정 숫자 우선 순위를 요구하는 대신 애플리케이션에서 두 스토리보드의 상대적 우선 순위를 결정할 수 있습니다.
경쟁 관리
개발자는 우선 순위 비교 콜백을 구현하여 우선적으로 실행될 예정인 스토리보드와 이미 일정에 예약된 스토리보드의 우선 순위를 비교할 수 있습니다. 우선 순위 비교를 구현하는 애플리케이션은 기본 논리를 사용하여 스토리보드가 다른 항목을 선점하는 시기를 결정할 수 있습니다. 예약 충돌을 해결하기 위해 Windows 애니메이션은 애플리케이션에 다음 순서대로 수행할 수 있는 작업을 요청합니다.
- 예약된 스토리보드를 취소합니다. 예약된 스토리보드가 아직 재생을 시작하지 않은 경우 취소되어 일정에서 즉시 제거될 수 있습니다.
- 예약된 스토리보드를 트리밍합니다. 새 스토리보드가 예약된 스토리보드를 트리밍하면, 새 스토리보드가 애니메이션을 적용하기 시작하는 즉시 예약된 스토리보드는 변수에 더 이상 영향을 주지 않습니다. 속도가 일치하여 새 스토리보드가 이전 스토리보드에서 끊김 없이 자연스럽게 이어질 수 있습니다.
- 예약된 스토리보드를 마무리합니다. 스토리보드는 무기한 반복되는 루프가 포함된 경우에만 결론을 내릴 수 있습니다. 스토리보드가 종료될 때 이러한 루프에 있으면 현재 반복이 완료되고 나머지 스토리보드가 재생됩니다. 스토리보드가 종료될 때 루프가 아직 시작되지 않은 경우, 루프는 건너뛰어집니다.
- 예약된 스토리보드를 압축합니다. 예약된 스토리보드를 트리밍하거나 취소하는 옵션이 아닌 경우 스토리보드를 완료할 수 있습니다. Windows 애니메이션은 예약된 스토리보드와 이전에 예약된 스토리보드의 사용 가능한 시간을 압축하여, 변수들이 더 빠르게 최종 상태에 도달할 수 있도록 합니다. 압축이 적용되면 영향을 받는 스토리보드에 대한 시간이 일시적으로 가속화되므로 더 빠르게 재생됩니다.
등록된 우선 순위 비교 개체에서 위의 작업을 허용하지 않으면 새 스토리보드 예약 시도가 실패합니다. 기본적으로 모든 스토리보드는 오류를 방지하기 위해 트리밍, 종료 또는 압축될 수 있지만 취소할 수는 없습니다.
다음 다이어그램은 UI_ANIMATION_STORYBOARD_STATUS 열거형에 정의된 상태를 사용하여 스토리보드의 수명 주기를 보여 줍니다. 애플리케이션은 Windows 애니메이션 API를 사용하여 스토리보드를 빌드하고 예약을 위해 제출합니다. 애니메이션 관리자는 스토리보드를 예약하고 애니메이션을 관리합니다.
애니메이션 관리자가 스토리보드를 예약하고 애니메이션을 관리하는 방법을 보여 주는
스토리보드 예약 및 관리에 대한 자세한 내용은 Storyboard 개요참조하세요.
관련 항목