Animace a časování přehledu systému

Toto téma popisuje, jak systém časování používá animaci Timelinea Clock třídy k animaci vlastností.

Požadavky

Abyste pochopili toto téma, měli byste být schopni použít animace WPF k animaci vlastností, jak je popsáno v přehledu animací. Pomáhá také seznámit se s vlastnostmi závislostí; Další informace najdete v přehledu vlastností závislostí.

Časové osy a hodiny

Přehled animací popisuje, jak Timeline představuje segment času a animace je typTimeline, který vytváří výstupní hodnoty. Sám o Timelinesobě nedělá nic jiného, než jen popsat segment času. Je to objekt časové osy Clock , který dělá skutečnou práci. Animace také ve skutečnosti animuje vlastnosti: třída animace popisuje, jak se mají vypočítat výstupní hodnoty, ale Clock je to vytvořený pro animaci, která řídí animační výstup a aplikuje ji na vlastnosti.

A Clock je speciální typ objektu, který udržuje stav běhu související s časováním pro Timeline. Poskytuje tři části informací, které jsou nezbytné pro animační a časovací systém: CurrentTime, a CurrentProgressCurrentState. A Clock určuje aktuální čas, průběh a stav pomocí chování časování popsaného jeho Timeline: Duration, , RepeatBehaviorAutoReversea tak dále.

Ve většině případů se pro časovou osu Clock vytvoří automaticky. Když animujete pomocí metody Storyboard nebo BeginAnimation pomocí metody, hodiny se automaticky vytvoří pro časové osy a animace a použijí se na jejich cílové vlastnosti. Můžete také vytvořit Clock explicitně pomocí CreateClock metody vašeho Timeline. Metoda MediaTimeline.CreateClock vytvoří hodiny odpovídajícího typu, Timeline na kterém je volána. Timeline Pokud obsahuje podřízené časové osy, vytvoří Clock pro ně i objekty. Výsledné Clock objekty jsou uspořádány do stromů, které odpovídají struktuře Timeline stromu objektů, ze kterého jsou vytvořeny.

Existují různé typy hodin pro různé typy časových os. Následující tabulka uvádí Clock typy, které odpovídají některým z různých Timeline typů.

Typ časové osy Typ hodin Účel hodin
Animace (dědí z AnimationTimeline) AnimationClock Generuje výstupní hodnoty pro vlastnost závislosti.
MediaTimeline MediaClock Zpracovává mediální soubor.
ParallelTimeline ClockGroup Skupiny a ovládací prvky podřízených Clock objektů
Storyboard ClockGroup Skupiny a ovládací prvky podřízených Clock objektů

Pomocí metody můžete použít všechny AnimationClock objekty, které vytvoříte pro kompatibilní vlastnosti ApplyAnimationClock závislostí.

Ve scénářích náročných na výkon, jako je animování velkého počtu podobných objektů, může správa vlastního Clock použití přinést výhody výkonu.

Hodiny a Správce času

Když animujete objekty ve WPF, je to správce času, který spravuje Clock objekty vytvořené pro časové osy. Správce času je kořenem stromu Clock objektů a řídí tok času v daném stromu. Pro každou aplikaci WPF se automaticky vytvoří správce času a vývojář aplikací je neviditelný. Správce času "chytá" mnohokrát za sekundu; skutečný počet záškrtů, ke kterým dochází za každou sekundu, se liší v závislosti na dostupných systémových prostředcích. Během každého z těchto škrtů vypočítá správce času stav všech ActiveClock objektů ve stromu časování.

Následující obrázek znázorňuje vztah mezi správcem času a AnimationClockvlastností animované závislosti.

Timing system components and the time manager.
Animace vlastnosti

Když správce času zaškrtne, aktualizuje čas každé ActiveClock aplikace. Clock Pokud se jedná o hodnotuAnimationClock, použije GetCurrentValue metoduAnimationTimeline, ze které byla vytvořena, k výpočtu aktuální výstupní hodnoty. Poskytuje AnimationClockAnimationTimeline aktuální místní čas, vstupní hodnotu, což je obvykle základní hodnota vlastnosti a výchozí cílová hodnota. Když načtete hodnotu animované vlastnosti pomocí GetValue metody nebo jeho CLR příslušenství, získáte výstup jeho AnimationClock.

Skupiny hodin

Předchozí část popisuje, jak existují různé typy Clock objektů pro různé typy časových os. Následující obrázek znázorňuje vztah mezi správcem času, a ClockGroup, a AnimationClockanimovaným závislostem vlastnost. Vytvoří ClockGroup se pro časové osy, které seskupují další časové osy, například Storyboard třídu, která seskupuje animace a další časové osy.

Timing system components with the time manager and dependency properties.
A ClockGroup

Složení

Je možné přidružit více hodin k jedné vlastnosti, v takovém případě každé hodiny používá výstupní hodnotu předchozích hodin jako základní hodnotu. Následující obrázek znázorňuje tři AnimationClock objekty použité na stejnou vlastnost. Clock1 používá jako vstup základní hodnotu animované vlastnosti a používá ji k vygenerování výstupu. Clock2 přebírá výstup z clock1 jako vstup a používá ho k vygenerování výstupu. Clock3 přebírá výstup z clock2 jako vstup a používá ho k vygenerování výstupu. Pokud více hodin ovlivňuje stejnou vlastnost současně, říká se, že jsou v řetězci složení.

Timing system components composed with multiple dependency properties.
Řetěz složení

Všimněte si, že i když je relace vytvořená mezi vstupem a výstupem AnimationClock objektů v řetězci složení, jejich chování časování není ovlivněno; Clock objekty (včetně AnimationClock objektů) mají hierarchickou závislost na nadřazených Clock objektech.

Chcete-li použít více hodin na stejnou vlastnost, použijte ComposeHandoffBehavior při použití Storyboard, animace nebo AnimationClock.

Značky a konsolidace událostí

Kromě výpočtu výstupních hodnot dělá správce času jinou práci pokaždé, když zaškrtá: určuje stav jednotlivých hodin a podle potřeby vyvolává události.

Zatímco klíště dochází často, je možné, že se mezi klíštěmi stane spousta věcí. Například může být zastaven, Clock spuštěn a zastaven znovu, v takovém případě se jeho CurrentState hodnota třikrát změní. Teoreticky CurrentStateInvalidated může být událost vyvolána vícekrát v jediném ticku, ale časovací modul konsoliduje události, takže CurrentStateInvalidated událost může být vyvolána maximálně jednou na jedno zaškrtnutí. To platí pro všechny události časování: u daného Clock objektu je vyvolána maximálně jedna událost každého typu.

Clock Když přepne stav a vrátí se zpět do původního stavu mezi značkami (například změnou z Active na Stopped a zpětActive), přidružená událost se stále vyskytuje.

Další informace o událostech časování najdete v přehledu událostí časování.

Aktuální hodnoty a základní hodnoty vlastností

Animatable vlastnost může mít dvě hodnoty: základní a aktuální hodnotu. Když nastavíte vlastnost pomocí svého přístupového objektu SetValue CLR nebo metody, nastavíte její základní hodnotu. Pokud vlastnost není animované, její základní a aktuální hodnoty jsou stejné.

Když animujete vlastnost, AnimationClock nastaví aktuální hodnotu vlastnosti. Načtení hodnoty vlastnosti prostřednictvím jeho objektu CLR nebo GetValue metoda vrátí výstup AnimationClock při AnimationClock je Active nebo Filling. Základní hodnotu vlastnosti můžete načíst pomocí GetAnimationBaseValue metody.

Viz také