애니메이션 및 타이밍 시스템 개요Animation and Timing System Overview

이 항목에서는 타이밍 시스템이 애니메이션을 사용 하는 방법에 대해 설명 합니다. Timeline, 및 Clock 클래스 속성에 애니메이션 효과를 합니다.This topic describes how the timing system uses the animation, Timeline, and Clock classes to animate properties.

전제 조건Prerequisites

이 항목을 이해하려면 애니메이션 개요에 설명된 대로 WPFWPF 애니메이션을 사용하여 속성에 애니메이션 효과를 줄 수 있어야 합니다.To understand this topic, you should be able to use WPFWPF animations to animate properties, as described in the Animation Overview. 종속성 속성에 익숙한 것도 도움이 됩니다. 자세한 내용은 종속성 속성 개요를 참조하세요.It also helps to be familiar with dependency properties; for more information, see the Dependency Properties Overview.

타임라인 및 시계Timelines and Clocks

애니메이션 개요 하는 방법을 설명를 Timeline 나타냅니다 시간과 애니메이션의 세그먼트는 형식입니다 Timeline 출력 값을 생성 합니다.The Animation Overview described how a Timeline represents a segment of time, and an animation is a type of Timeline that produces output values. 자체적으로 Timeline, 이외의 아무 것도 수행 하지 시간의 세그먼트를 설명 하는 것입니다.By itself, a Timeline, doesn't do anything other than just describe a segment of time. 타임 라인의 Clock 실제 작업을 수행 하는 개체입니다.It's the timeline's Clock object that does the real work. 마찬가지로 애니메이션 하지 실제로 속성 애니메이션 효과 주기: 애니메이션 클래스는 출력 값 계산 수 해야 하는 방법에 대해 설명 합니다. 이지만 Clock 애니메이션 속성에 적용 하는 애니메이션 출력 드라이브에 대해 생성 된 합니다.Likewise, animation doesn't actually animate properties: an animation class describes how output values should be calculated, but it’s the Clock that was created for the animation that drives the animation output and applies it to properties.

A Clock 는 특수 유형의 개체에 대 한 타이밍 관련 런타임 상태를 유지 하는 Timeline합니다.A Clock is a special type of object that maintains timing-related run-time state for the Timeline. 애니메이션 및 타이밍 시스템에 필수적인 3 개의 비트 정보를 제공 합니다. CurrentTime, CurrentProgress, 및 CurrentState합니다.It provides three bits of information that are essential to the animation and timing system: CurrentTime, CurrentProgress, and CurrentState. A Clock 에 설명 된 타이밍 동작을 사용 하 여 해당 현재 시간, 진행률 및 상태를 확인 해당 Timeline: DurationRepeatBehavior, AutoReverse등입니다.A Clock determines its current time, progress, and state by using the timing behaviors described by its Timeline: Duration, RepeatBehavior, AutoReverse, and so on.

대부분의 경우에는 Clock 타임 라인에 대 한 자동으로 만들어집니다.In most cases, a Clock is created automatically for your timeline. 사용 하 여 애니메이션 효과 주는 경우는 Storyboard 또는 BeginAnimation 메서드 시계가 자동으로 타임 라인 및 애니메이션에 대 한 생성 되어 해당 대상된 속성에 적용 합니다.When you animate by using a Storyboard or the BeginAnimation method, clocks are automatically created for your timelines and animations and applied to their targeted properties. 만들 수도 있습니다는 Clock 를 사용 하 여 명시적으로 CreateClock 메서드의 프로그램 Timeline합니다.You can also create a Clock explicitly by using the CreateClock method of your Timeline. 합니다 MediaTimeline.CreateClock 방법에 대 한 적절 한 유형의 시계를 만듭니다는 Timeline 에서 호출 됩니다.The MediaTimeline.CreateClock method creates a clock of the appropriate type for the Timeline on which it is called. 경우는 Timeline 자식 타임 라인이 포함 만들면 Clock 에 개체도 합니다.If the Timeline contains child timelines, it creates Clock objects for them as well. 결과 Clock 개체의 구조와 일치 하는 트리로 정렬 되는 Timeline 에서 생성 된 개체 트리.The resulting Clock objects are arranged in trees that match the structure of the Timeline objects tree from which they are created.

다양한 유형의 타임라인에 대한 여러 유형의 시계가 있습니다.There are different types of clocks for different types of timelines. 다음 표는 Clock 몇 가지 다른에 해당 하는 형식 Timeline 형식입니다.The following table shows the Clock types that correspond to some of the different Timeline types.

타임라인 형식Timeline type 시계 유형Clock type 시계 용도Clock purpose
애니메이션 (에서 상속 AnimationTimeline)Animation (inherits from AnimationTimeline) AnimationClock 종속성 속성에 대한 출력 값을 생성합니다.Generates output values for a dependency property.
MediaTimeline MediaClock 미디어 파일을 처리합니다.Processes a media file.
ParallelTimeline ClockGroup 그룹 및 해당 자식 컨트롤 Clock 개체Groups and controls its child Clock objects
Storyboard ClockGroup 그룹 및 해당 자식 컨트롤 Clock 개체Groups and controls its child Clock objects

적용할 수 있습니다 AnimationClock 호환 되는 종속성 속성을 사용 하 여 만든 개체는 ApplyAnimationClock 메서드.You can apply any AnimationClock objects you create to compatible dependency properties by using the ApplyAnimationClock method.

많은 수의 유사한 개체에 애니메이션을 적용 하는 등 성능 집약적인 시나리오에서는 관리 사용자 고유의 Clock 사용 하 여 성능 이점을 제공할 수 있습니다.In performance-intensive scenarios, such as animating large numbers of similar objects, managing your own Clock use can provide performance benefits.

시계 및 시간 관리자Clocks and the Time Manager

개체에 애니메이션 효과 주기 WPFWPF를 관리 하는 시간 관리자가를 Clock 타임 라인을 위해 생성 된 개체입니다.When you animate objects in WPFWPF, it’s the time manager that manages the Clock objects created for your timelines. 시간 관리자는 Clock 개체 트리의 루트이며 해당 트리에서 시간의 흐름을 제어합니다.The time manager is the root of a tree of Clock objects and controls the flow of time in that tree. 시간 관리자는 각 WPFWPF 애플리케이션에 대해 자동으로 만들어지며 애플리케이션 개발자에게 표시되지 않습니다.A time manager is automatically created for each WPFWPF application and is invisible to the application developer. 시간 관리자에서 매초 여러 번 "틱"이 발생하는데 초당 발생하는 실제 틱 수는 사용 가능한 시스템 리소스에 따라 다릅니다.The time manager "ticks" many times per second; the actual number of ticks that occur each second varies depending on available system resources. 각각이 틱 동안 시간 관리자는 모든의 상태를 계산 Active Clock 는 타이밍 트리의 개체입니다.During each one of these ticks, the time manager computes the state of all Active Clock objects in the timing tree.

다음 그림에서는 시간 관리자 간의 관계를 보여 줍니다. 및 AnimationClock, 및 애니메이션된 종속성 속성입니다.The following illustration shows the relationship between the time manager, and AnimationClock, and an animated dependency property.

타이밍 시스템 구성 요소Timing system components
속성에 애니메이션 효과 주기Animating a property

시간 관리자에서 틱의 시간 업데이트 마다 Active Clock 응용 프로그램에서입니다.When the time manager ticks, it updates the time of every Active Clock in the application. 경우는 ClockAnimationClock를 사용 하 여는 GetCurrentValue 메서드의 AnimationTimeline 에서 생성 된 현재 계산 출력 값입니다.If the Clock is an AnimationClock, it uses the GetCurrentValue method of the AnimationTimeline from which it was created to calculate its current output value. 합니다 AnimationClock 제공 된 AnimationTimeline 현재 현지 시간, 일반적으로 속성의 기준 값 이므로 입력된 값 및 기본 대상 값을 사용 하 여 합니다.The AnimationClock supplies the AnimationTimeline with the current local time, an input value, which is typically the base value of the property, and a default destination value. 애니메이션의 값을 검색 하는 경우 속성을 사용 하 여 합니다 GetValue 의 출력을 가져오려면 메서드 또는 해당 CLR 접근자에 해당 AnimationClock합니다.When you retrieve the value of an animated by property using the GetValue method or its CLR accessor, you get the output of its AnimationClock.

시계 그룹Clock Groups

이전 섹션의 다른 형식은 어떻게 설명 Clock 다양 한 유형의 타임 라인에 대 한 개체입니다.The preceding section described how there are different types of Clock objects for different types of timelines. 다음 그림에서는 시간 관리자 간의 관계를 보여 줍니다.는 ClockGroup, AnimationClock, 및 애니메이션된 종속성 속성입니다.The following illustration shows the relationship between the time manager, a ClockGroup, an AnimationClock, and an animated dependency property. A ClockGroup 와 같은 다른 타임 라인을 그룹화 하는 타임 라인에 대해 생성 됩니다는 Storyboard 애니메이션 및 다른 타임 라인을 그룹화 하는 클래스입니다.A ClockGroup is created for timelines that group other timelines, such as the Storyboard class, which groups animations and other timelines.

타이밍 시스템 구성 요소Timing system components
ClockGroupA ClockGroup

컴퍼지션Composition

여러 시계를 단일 속성에 연결할 수 있습니다. 이 경우 각 시계에서 이전 시계의 출력 값을 기준 값으로 사용합니다.It's possible to associate multiple clocks with a single property, in which case each clock uses the output value of the preceding clock as its base value. 다음 그림에서는 3 개의 AnimationClock 동일한 속성에 적용 하는 개체입니다.The following illustration shows three AnimationClock objects applied to the same property. Clock1은 애니메이션 속성의 기준 값을 해당 입력으로 사용하고 이를 사용하여 출력을 생성합니다.Clock1 uses the base value of the animated property as its input and uses it to generate output. Clock2는 Clock1의 출력을 입력으로 받고 이를 사용하여 출력을 생성합니다.Clock2 takes the output from Clock1 as its input and uses it to generate output. Clock3은 Clock2의 출력을 입력으로 받고 이를 사용하여 출력을 생성합니다.Clock3 takes the output from Clock2 as its input and uses it to generate output. 여러 시계가 같은 속성에 동시에 영향을 주는 경우 컴퍼지션 체인에 있다고 합니다.When multiple clocks affect the same property simultaneously, they are said to be in a composition chain.

타이밍 시스템 구성 요소Timing system components
컴퍼지션 체인A composition chain

입력과 출력 간의 관계가 만들어져 있지만 AnimationClock 개체 컴퍼지션 체인에 해당 타이밍 동작은 영향을 받지 않습니다. Clock 개체 (포함 AnimationClock 개체)는 부모에 대 한 계층적 종속성 Clock 개체입니다.Note that although a relationship is created among the input and output of the AnimationClock objects in the composition chain, their timing behaviors are not affected; Clock objects (including AnimationClock objects) have a hierarchical dependency on their parent Clock objects.

여러 시계가 같은 속성에 적용 하려면 사용 합니다 Compose HandoffBehavior 적용 하는 경우를 Storyboard, 애니메이션 또는 AnimationClock합니다.To apply multiple clocks to the same property, use the Compose HandoffBehavior when applying a Storyboard, animation, or AnimationClock.

틱 및 이벤트 통합Ticks and Event Consolidation

출력 값을 계산하는 것 외에도 시간 관리자는 틱을 발생시킬 때마다 다른 작업을 수행합니다. 각 시계의 상태를 결정하고 적절하게 이벤트를 발생시킵니다.In addition to calculating output values, the time manager does other work every time it ticks: it determines the state of each clock and raises events as appropriate.

틱은 자주 발생하지만 틱 간에 많은 사항이 발생할 수 있습니다.While ticks occur frequently, it's possible for a lot of things to happen between ticks. 예를 들어, 한 Clock 중지, 시작 및 경우에 다시 중지 될 수 있습니다 해당 CurrentState 값 3 번 변경 됩니다.For example, a Clock might be stopped, started, and stopped again, in which case its CurrentState value will have changed three times. 이론적으로 CurrentStateInvalidated 타이밍 엔진이 이벤트를 통합 하는 반면; 이벤트가 단일 틱에서 여러 번 발생할 수 없습니다 있도록는 CurrentStateInvalidated 이벤트가 틱 당 한 번만 발생할 수 있습니다.In theory, the CurrentStateInvalidated event could be raised multiple times in a single tick; however, the timing engine consolidates events, so that the CurrentStateInvalidated event can be raised at most once per tick. 이 모든 타이밍 이벤트에 적용: 각 유형의 최대 하나의 이벤트에 대 한 발생을 지정 Clock 개체입니다.This is true for all timing events: at most one event of each type is raised for a given Clock object.

경우는 Clock 상태를 전환 하 고 틱 간의 원래 상태로 반환 (에서 변경 하는 등 ActiveStopped 하 고 다시 Active), 연결된 된 이벤트가 계속 발생 합니다.When a Clock switches states and returns back to its original state between ticks (such as changing from Active to Stopped and back to Active), the associated event still occurs.

타이밍 이벤트에 대한 자세한 내용은 타이밍 이벤트 개요를 참조하세요.For more information about timing events, see the Timing Events Overview.

속성의 현재 값 및 기준 값Current Values and Base Values of Properties

애니메이션 효과를 줄 수 있는 속성은 두 값(기준 값 및 현재 값)을 가질 수 있습니다.An animatable property can have two values: a base value and a current value. 해당 CLR 접근자를 사용 하 여 속성을 설정한 경우 또는 SetValue 메서드, 설정한 기준 값입니다.When you set property using its CLR accessor or the SetValue method, you set its base value. 속성에 애니메이션 효과를 줄 수 없는 경우 해당 기준 값과 현재 값은 동일합니다.When a property is not animated, its base and current values are the same.

속성에 애니메이션 효과 주는 경우 합니다 AnimationClock 속성의 설정 현재 값입니다.When you animate a property, the AnimationClock sets the property's current value. 해당 CLR 접근자를 통해 속성의 값을 검색 또는 GetValue 의 출력을 반환 하는 메서드를 AnimationClock 때 합니다 AnimationClockActive 또는 Filling합니다.Retrieving the property's value through its CLR accessor or the GetValue method returns the output of the AnimationClock when the AnimationClock is Active or Filling. 사용 하 여 속성의 기준 값을 검색할 수 있습니다는 GetAnimationBaseValue 메서드.You can retrieve the property's base value by using the GetAnimationBaseValue method.

참고자료See also