Información general sobre sistemas de temporización y animaciónAnimation and Timing System Overview

Este tema describe cómo utiliza la animación, el sistema de temporización Timeline, y Clock clases para animar propiedades.This topic describes how the timing system uses the animation, Timeline, and Clock classes to animate properties.

Requisitos previosPrerequisites

Para entender este tema, debe poder utilizar animaciones WPFWPF para animar propiedades, como se describe en Información general sobre animaciones.To understand this topic, you should be able to use WPFWPF animations to animate properties, as described in the Animation Overview. También ayuda conocer las propiedades de dependencia; para más información, vea Información general sobre las propiedades de dependencia.It also helps to be familiar with dependency properties; for more information, see the Dependency Properties Overview.

Escalas de tiempo y relojesTimelines and Clocks

El información general sobre animaciones se describe cómo un Timeline representa un segmento de tiempo y una animación es un tipo de Timeline que genera valores de salida.The Animation Overview described how a Timeline represents a segment of time, and an animation is a type of Timeline that produces output values. Por sí mismo, un Timeline, no hace nada más que describir un segmento de tiempo.By itself, a Timeline, doesn't do anything other than just describe a segment of time. Es la escala de tiempo Clock objeto que hace el trabajo real.It's the timeline's Clock object that does the real work. Del mismo modo, animación realmente no anima las propiedades: una clase de animación describe cómo se deben calcular los valores de salida, pero es el Clock que se creó para la animación que impulsa la salida de animación y se aplica a las propiedades.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.

Un Clock es un tipo especial de objeto que mantiene el estado de tiempo de ejecución relacionados con la sincronización para el Timeline.A Clock is a special type of object that maintains timing-related run-time state for the Timeline. Proporciona tres bits de información que son esenciales para el sistema de temporización y animación: CurrentTime, CurrentProgress, y CurrentState.It provides three bits of information that are essential to the animation and timing system: CurrentTime, CurrentProgress, and CurrentState. Un Clock determina su estado, el progreso y la hora actual utilizando los comportamientos de control de tiempo descritos por sus Timeline: Duration, RepeatBehavior, AutoReverse, y así sucesivamente.A Clock determines its current time, progress, and state by using the timing behaviors described by its Timeline: Duration, RepeatBehavior, AutoReverse, and so on.

En la mayoría de los casos, un Clock se crea automáticamente para la escala de tiempo.In most cases, a Clock is created automatically for your timeline. Al animar utilizando un Storyboard o BeginAnimation método, relojes automáticamente se crean para sus escalas de tiempo y las animaciones y se aplican a sus propiedades concretas.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. También puede crear un Clock explícitamente mediante el CreateClock método de su Timeline.You can also create a Clock explicitly by using the CreateClock method of your Timeline. El MediaTimeline.CreateClock método crea un reloj del tipo adecuado para el Timeline en que se llama.The MediaTimeline.CreateClock method creates a clock of the appropriate type for the Timeline on which it is called. Si el Timeline contiene escalas de tiempo secundarias, crea Clock objetos también para ellos.If the Timeline contains child timelines, it creates Clock objects for them as well. Resultante Clock objetos se organizan en árboles que coinciden con la estructura de la Timeline desde la que se crean objetos de árbol.The resulting Clock objects are arranged in trees that match the structure of the Timeline objects tree from which they are created.

Hay diferentes tipos de relojes para diferentes tipos de escalas de tiempo.There are different types of clocks for different types of timelines. La tabla siguiente muestra la Clock tipos que corresponden a algunos de los diferentes Timeline tipos.The following table shows the Clock types that correspond to some of the different Timeline types.

Tipos de objetos TimelineTimeline type Tipo de relojClock type Propósito del relojClock purpose
Animación (hereda de AnimationTimeline)Animation (inherits from AnimationTimeline) AnimationClock Genera valores de salida para una propiedad de dependencia.Generates output values for a dependency property.
MediaTimeline MediaClock Procesa un archivo multimedia.Processes a media file.
ParallelTimeline ClockGroup Agrupa y controla su elemento secundario Clock objetosGroups and controls its child Clock objects
Storyboard ClockGroup Agrupa y controla su elemento secundario Clock objetosGroups and controls its child Clock objects

Puede aplicar cualquiera AnimationClock objetos crea para las propiedades de dependencia compatibles utilizando el ApplyAnimationClock método.You can apply any AnimationClock objects you create to compatible dependency properties by using the ApplyAnimationClock method.

En escenarios de rendimiento intensivo, tales como la animación de grandes cantidades de objetos similares, administrar su propio Clock uso puede proporcionar ventajas de rendimiento.In performance-intensive scenarios, such as animating large numbers of similar objects, managing your own Clock use can provide performance benefits.

Los relojes y el administrador de tiempoClocks and the Time Manager

Al animar objetos en WPFWPF, es el Administrador de tiempo que administra el Clock objetos creados para las escalas de tiempo.When you animate objects in WPFWPF, it’s the time manager that manages the Clock objects created for your timelines. El administrador de tiempo es la raíz de un árbol de objetos Clock y controla el flujo de tiempo en ese árbol.The time manager is the root of a tree of Clock objects and controls the flow of time in that tree. El administrador de tiempo se crea automáticamente para cada aplicación WPFWPF y no es visible para el desarrollador de aplicaciones.A time manager is automatically created for each WPFWPF application and is invisible to the application developer. El administrador de tiempo "marca pasos" muchas veces por segundo; el número real de pasos que se producen cada segundo varía, en función de los recursos disponibles en el sistema.The time manager "ticks" many times per second; the actual number of ticks that occur each second varies depending on available system resources. Durante cada uno de estos pasos, el Administrador de tiempo calcula el estado de todos los Active Clock objetos en el árbol de control de tiempo.During each one of these ticks, the time manager computes the state of all Active Clock objects in the timing tree.

La siguiente ilustración muestra la relación entre el Administrador de tiempo, y AnimationClocky una propiedad de dependencia animada.The following illustration shows the relationship between the time manager, and AnimationClock, and an animated dependency property.

Los componentes del sistema de control de tiempoTiming system components
Animación de una propiedadAnimating a property

Cuando el Administrador de tiempo tics, actualiza el tiempo de cada Active Clock en la aplicación.When the time manager ticks, it updates the time of every Active Clock in the application. Si el Clock es un AnimationClock, usa el GetCurrentValue método de la AnimationTimeline desde que se creó calcular su actual valor de salida.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. El AnimationClock proporciona el AnimationTimeline con la hora local actual, un valor de entrada, que normalmente es el valor de la propiedad base y un valor de destino predeterminado.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. Cuando se recupera el valor de un elemento animado por propiedad utilizando el GetValue método o su descriptor de acceso CLR, obtendrá el resultado de su 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.

Grupos de relojesClock Groups

La sección anterior describió cómo hay diferentes tipos de Clock objetos para los distintos tipos de escalas de tiempo.The preceding section described how there are different types of Clock objects for different types of timelines. La siguiente ilustración muestra la relación entre el Administrador de tiempo, un ClockGroup, un AnimationClocky una propiedad de dependencia animada.The following illustration shows the relationship between the time manager, a ClockGroup, an AnimationClock, and an animated dependency property. Un ClockGroup se crea para las escalas de tiempo que agrupan otras escalas de tiempo, como el Storyboard (clase), que agrupa animaciones y otras escalas de tiempo.A ClockGroup is created for timelines that group other timelines, such as the Storyboard class, which groups animations and other timelines.

Los componentes del sistema de control de tiempoTiming system components
Un objeto ClockGroupA ClockGroup

ComposiciónComposition

Es posible asociar varios relojes a una única propiedad, en cuyo caso cada reloj utiliza el valor de salida del reloj anterior como su valor base.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. La siguiente ilustración muestra tres AnimationClock objetos que se aplica a la misma propiedad.The following illustration shows three AnimationClock objects applied to the same property. El reloj1 utiliza el valor base de la propiedad animada como entrada y lo utiliza para generar la salida.Clock1 uses the base value of the animated property as its input and uses it to generate output. El reloj2 toma la salida del reloj1 como entrada y lo utiliza para generar la salida.Clock2 takes the output from Clock1 as its input and uses it to generate output. El reloj3 toma la salida del reloj2 como entrada y lo utiliza para generar la salida.Clock3 takes the output from Clock2 as its input and uses it to generate output. Cuando varios relojes afectan simultáneamente a la misma propiedad, se dice que están en una cadena de composición.When multiple clocks affect the same property simultaneously, they are said to be in a composition chain.

Los componentes del sistema de control de tiempoTiming system components
Una cadena de composiciónA composition chain

Tenga en cuenta que aunque se crea una relación entre la entrada y salida de la AnimationClock objetos en la cadena de composición, sus comportamientos de control de tiempo no se ven afectados; Clock objetos (incluidos AnimationClock objetos) tiene una dependencia jerárquica de sus principales Clock objetos.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.

Para aplicar varios relojes a la misma propiedad, utilice el Compose HandoffBehavior al aplicar un Storyboard, animación, o AnimationClock.To apply multiple clocks to the same property, use the Compose HandoffBehavior when applying a Storyboard, animation, or AnimationClock.

Pasos y consolidación de eventosTicks and Event Consolidation

Además de calcular valores de salida, el administrador de tiempo hace otras cosas a cada paso que marca: determina el estado de cada reloj y genera los eventos adecuados.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.

Aunque los ciclos se producen con frecuencia, pueden ocurrir muchas cosas entre ellos.While ticks occur frequently, it's possible for a lot of things to happen between ticks. Por ejemplo, un Clock podría detenido, iniciar y detener de nuevo, en cuyo caso su CurrentState valor habrá cambiado tres veces.For example, a Clock might be stopped, started, and stopped again, in which case its CurrentState value will have changed three times. En teoría, el CurrentStateInvalidated evento podría generarse varias veces en un único paso; sin embargo, el motor de tiempo consolida los eventos, para que el CurrentStateInvalidated evento puede generarse como máximo una vez por tic-tac.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. Esto es cierto para todos los eventos de control de tiempo: a lo sumo un evento de cada tipo se genera para un determinado Clock objeto.This is true for all timing events: at most one event of each type is raised for a given Clock object.

Cuando un Clock cambia de estado y devuelve a su estado original entre pasos (como el cambio de Active a Stopped y volver a Active), el evento asociado continúa produciéndose.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.

Para más información acerca de los eventos de control de tiempo, vea Información general sobre eventos de control de tiempo.For more information about timing events, see the Timing Events Overview.

Valores actuales y valores base de propiedadesCurrent Values and Base Values of Properties

Una propiedad que se pueda animar puede tener dos valores: un valor base y un valor actual.An animatable property can have two values: a base value and a current value. Al establecer la propiedad mediante su descriptor de acceso CLR o SetValue método, establezca su valor base.When you set property using its CLR accessor or the SetValue method, you set its base value. Cuando no se anima una propiedad, su valor base y su valor actual son el mismo.When a property is not animated, its base and current values are the same.

Al animar una propiedad, el AnimationClock establece la propiedad actual valor.When you animate a property, the AnimationClock sets the property's current value. Recuperar el valor de propiedad a través de su descriptor de acceso CLR o el GetValue método devuelve el resultado de la AnimationClock cuando el AnimationClock es Active o 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. Puede recuperar el valor de la propiedad base mediante el GetAnimationBaseValue método.You can retrieve the property's base value by using the GetAnimationBaseValue method.

Vea tambiénSee also