アニメーションとタイミング システムの概要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.

AClockは特殊な種類の実行時のタイミングに関連する状態を保持するオブジェクトのTimelineします。A Clock is a special type of object that maintains timing-related run-time state for the Timeline. アニメーションとタイミング システムに不可欠な情報の 3 つのビットを提供します。 CurrentTimeCurrentProgress、およびCurrentStateします。It provides three bits of information that are essential to the animation and timing system: CurrentTime, CurrentProgress, and CurrentState. AClockで記述されるタイミング動作を使用して、現在の時刻、進行状況、および状態を判断します。 そのTimeline: DurationRepeatBehaviorAutoReverseなど。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. タイム マネージャーは 1 秒間に何度も "タイマーを刻み" ます。1 秒ごとに刻まれるタイマーの実際の数は、使用可能なシステム リソースによって異なります。The time manager "ticks" many times per second; the actual number of ticks that occur each second varies depending on available system resources. これらのタイマー刻みのそれぞれの中に、タイム マネージャーはすべての状態を計算しますActiveClockタイミング ツリー内のオブジェクト。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

時刻が更新されますが、タイム マネージャー、タイマーを刻むときにすべてActiveClockアプリケーションにします。When the time manager ticks, it updates the time of every Active Clock in the application. 場合、Clockは、AnimationClockを使用して、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. 次の図は、タイム マネージャー間のリレーションシップをClockGroupAnimationClock、およびアニメーション化された依存関係プロパティ。The following illustration shows the relationship between the time manager, a ClockGroup, an AnimationClock, and an animated dependency property. AClockGroupなど、他のタイムラインをグループ化するタイムラインに対して作成、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

複数のクロックを 1 つのプロパティと関連付けることができます。その場合、各クロックは前のクロックの出力値を基本値として使います。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ティックあたり最大で 1 回はイベントを発生させることができます。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. これは、すべてのタイミング イベントの場合は true: の各型の最大で 1 つのイベントが発生した、指定された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

アニメーション化可能なプロパティは、基本値と現在値の 2 つの値を持つことができます。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