애니메이션 및 타이밍 시스템 개요

이 주제에서는 타이밍 시스템이 애니메이션, TimelineClock 클래스를 사용하여 속성에 애니메이션 효과를 주는 방법을 설명합니다.

사전 요구 사항

이 항목을 이해하려면 애니메이션 개요에 설명된 대로 WPF 애니메이션을 사용하여 속성에 애니메이션 효과를 줄 수 있어야 합니다. 종속성 속성에 익숙한 것도 도움이 됩니다. 자세한 내용은 종속성 속성 개요를 참조하세요.

타임라인 및 시계

애니메이션 개요에서는 Timeline이 시간 세그먼트를 나타내는 방법과 애니메이션이 출력 값을 생성하는 Timeline 형식을 설명했습니다. 그 자체로 Timeline은 시간 세그먼트를 설명하는 것 외에 어떤 작업도 수행하지 않습니다. 실제 작업을 수행하는 것은 타임라인의 Clock 개체입니다. 마찬가지로 애니메이션은 속성에 애니메이션 효과를 실제로 주지 않습니다. 애니메이션 클래스에서는 출력 값을 계산해야 하는 방법을 설명하지만 이는 애니메이션 출력을 구동하여 속성에 적용하는 애니메이션을 위해 만든 Clock입니다.

ClockTimeline에 대한 타이밍 관련 런타임 상태를 유지하는 특수한 개체입니다. 애니메이션 및 타이밍 시스템에 필수적인 세 가지 정보(CurrentTime, CurrentProgressCurrentState)를 제공합니다. ClockTimeline: Duration, RepeatBehavior, AutoReverse에서 설명하는 타이밍 동작을 사용하여 현재 시간, 진행률 및 상태를 결정합니다.

대부분의 경우 타임라인에 대해 Clock이 자동으로 생성됩니다. Storyboard 또는 BeginAnimation 메서드를 사용하여 애니메이션을 적용하면 타임라인 및 애니메이션에 대한 시계가 자동으로 생성되어 대상 속성에 적용됩니다. TimelineCreateClock 메서드를 사용하여 명시적으로 Clock을 만들 수도 있습니다. MediaTimeline.CreateClock 메서드는 호출된 Timeline에 대해 적절한 형식의 시계를 만듭니다. Timeline에 자식 타임라인이 포함된 경우 자식 타임라인에 대한 Clock 개체도 생성합니다. 결과 Clock 개체는 생성된 Timeline 개체 트리의 구조와 일치하는 트리에 정렬됩니다.

다양한 유형의 타임라인에 대한 여러 유형의 시계가 있습니다. 다음 표는 다른 Timeline 유형 중 일부에 해당하는 Clock 유형을 보여 줍니다.

타임라인 유형 시계 유형 시계 용도
애니메이션(AnimationTimeline에서 상속됨) AnimationClock 종속성 속성에 대한 출력 값을 생성합니다.
MediaTimeline MediaClock 미디어 파일을 처리합니다.
ParallelTimeline ClockGroup 자식 Clock 개체를 그룹화하고 제어합니다.
Storyboard ClockGroup 자식 Clock 개체를 그룹화하고 제어합니다.

ApplyAnimationClock 메서드를 사용하여 생성한 모든 AnimationClock 개체를 호환되는 종속성 속성에 적용할 수 있습니다.

유사한 많은 개체에 애니메이션 효과를 주는 것과 같은 성능 집약적인 시나리오에서 자체 Clock 사용을 관리하면 성능상의 혜택을 얻을 수 있습니다.

시계 및 시간 관리자

WPF에서 개체에 애니메이션 효과를 줄 경우 시간 관리자는 시간 표시 막대에 대해 만들어진 Clock 개체를 관리합니다. 시간 관리자는 Clock 개체 트리의 루트이며 해당 트리에서 시간의 흐름을 제어합니다. 시간 관리자는 각 WPF 응용 프로그램에 대해 자동으로 만들어지며 응용 프로그램 개발자에게 표시되지 않습니다. 시간 관리자에서 매초 여러 번 "틱"이 발생하는데 초당 발생하는 실제 틱 수는 사용 가능한 시스템 리소스에 따라 다릅니다. 이러한 각 틱 동안 시간 관리자는 타이밍 트리에 있는 모든 ActiveClock 개체의 상태를 계산합니다.

다음 그림에서 시간 관리자, AnimationClock 및 애니메이션 종속성 속성 간의 관계를 보여 줍니다.

타이밍 시스템 구성 요소 및 타임 관리자.
속성에 애니메이션 효과 주기

시간 관리자에서 틱이 발생하면 애플리케이션의 모든 ActiveClock 시간을 업데이트합니다. ClockAnimationClock이면 생성된 AnimationTimelineGetCurrentValue 메서드를 사용하여 현재 출력 값을 계산합니다. AnimationClockAnimationTimeline에 현재 현지 시간, 일반적으로 속성의 기본 값인 입력 값 및 기본 대상 값을 제공합니다. GetValue 메서드 또는 해당 CLR 접근자를 사용하여 애니메이션 효과가 적용된 속성의 값을 검색하면 AnimationClock의 출력을 얻습니다.

시계 그룹

이전 섹션에 다양한 유형의 타임라인에 대해 어떻게 다른 유형의 Clock 개체가 있는지 설명되어 있습니다. 다음 그림에서 시간 관리자, ClockGroup, AnimationClock 및 애니메이션 종속성 속성 간의 관계를 보여 줍니다. ClockGroup은 애니메이션 및 기타 타임라인을 그룹화하는 Storyboard 클래스와 같이 다른 타임라인을 그룹화하는 타임라인에 대해 생성됩니다.

타임 관리자 및 종속성 속성이 있는 타이밍 시스템 구성 요소.
ClockGroup

구성

여러 시계를 단일 속성에 연결할 수 있습니다. 이 경우 각 시계에서 이전 시계의 출력 값을 기준 값으로 사용합니다. 다음 그림은 동일한 속성에 적용된 세 개의 AnimationClock 개체를 보여 줍니다. Clock1은 애니메이션 속성의 기준 값을 해당 입력으로 사용하고 이를 사용하여 출력을 생성합니다. Clock2는 Clock1의 출력을 입력으로 받고 이를 사용하여 출력을 생성합니다. Clock3은 Clock2의 출력을 입력으로 받고 이를 사용하여 출력을 생성합니다. 여러 시계가 같은 속성에 동시에 영향을 주는 경우 컴퍼지션 체인에 있다고 합니다.

다양한 종속성 속성으로 구성된 타이밍 시스템 구성 요소.
컴퍼지션 체인

컴퍼지션 체인에 있는 AnimationClock 개체의 입력과 출력 간에 관계가 생성되지만 타이밍 동작은 영향을 받지 않습니다. Clock 개체(AnimationClock 개체 포함)에는 상위 Clock 개체에 대한 계층적 종속성이 있습니다.

동일한 속성에 여러 클록을 적용하려면 Compose, Animation 또는 HandoffBehavior을 적용할 때 StoryboardAnimationClock를 사용합니다.

틱 및 이벤트 통합

출력 값을 계산하는 것 외에도 시간 관리자는 틱을 발생시킬 때마다 다른 작업을 수행합니다. 각 시계의 상태를 결정하고 적절하게 이벤트를 발생시킵니다.

틱은 자주 발생하지만 틱 간에 많은 사항이 발생할 수 있습니다. 예를 들어 Clock이 중지되었다가 시작된 후 다시 중지될 수 있습니다. 이 경우 CurrentState 값은 3번 변경됩니다. 이론적으로 단일 틱에서 CurrentStateInvalidated 이벤트가 여러 번 발생할 수 있지만 타이밍 엔진은 이벤트를 통합하므로 CurrentStateInvalidated 이벤트는 틱마다 한 번만 발생할 수 있습니다. 이는 모든 타이밍 이벤트에 해당되며 각 유형의 이벤트 하나가 지정된 Clock 개체에 대해 발생합니다.

Clock이 상태를 전환하고 틱 사이에 원래 상태로 돌아갈 때(예: Active에서 Stopped으로, 다시 Active로 변경) 연결된 이벤트가 계속 발생합니다.

타이밍 이벤트에 대한 자세한 내용은 타이밍 이벤트 개요를 참조하세요.

속성의 현재 값 및 기준 값

애니메이션 효과를 줄 수 있는 속성은 두 값(기준 값 및 현재 값)을 가질 수 있습니다. CLR 접근자 또는 SetValue 메서드를 사용하여 속성을 설정할 때 기본 값을 설정합니다. 속성에 애니메이션 효과를 줄 수 없는 경우 해당 기준 값과 현재 값은 동일합니다.

속성에 애니메이션 효과를 줄 때 AnimationClock은 속성의 현재 값을 설정합니다. AnimationClockActive 또는 Filling인 경우 해당 CLR 접근자 또는 GetValue 메서드를 통해 속성 값을 검색하면 AnimationClock의 출력이 반환됩니다. GetAnimationBaseValue 메서드를 사용하여 속성의 기본 값을 검색할 수 있습니다.

참고 항목