Información general sobre manipulaciones e inercia

Las manipulaciones permiten a los usuarios mover, girar y cambiar el tamaño de los elementos de la interfaz de usuario utilizando manipuladores. Un manipulador representa un mouse o, en un escenario habilitado para toque, un lápiz o un dedo.

La inercia emula el comportamiento en el mundo real para los elementos de la interfaz de usuario que están en movimiento simulando fuerzas de fricción en los elementos. Esto permite a los elementos reducir gradualmente su velocidad de movimiento (lineal y angular) antes de detenerse. En este artículo se proporciona una introducción a las manipulaciones y la inercia para .NET Framework.

Manipulaciones

Una manipulación trata una colección de manipuladores como un objeto compuesto. Una aplicación puede realizar el seguimiento de los cambios realizados en el objeto compuesto en lugar de en los componentes individuales.

Observe la imagen de la siguiente ilustración. Un usuario puede utilizar dos manipuladores para mover, girar y ajustar a escala el tamaño de la imagen. Los cambios en cada manipulador se interpretan conjuntamente con los demás manipuladores.

Por ejemplo, si tiene dos manipuladores (1 y 2) en la imagen, y mueve el manipulador 1 en dirección +Y (hacia abajo), el cambio en la imagen dependerá de lo que le suceda al manipulador 2. Si el manipulador 2 también se mueve en dirección +Y (hacia abajo), la imagen simplemente se moverá en dirección +Y. Pero si manipulador 2 no cambia, o se mueve en dirección -Y (hacia arriba), la imagen reducirá su tamaño o girará.

Una fotografía virtual que manipulan dos dedos.

Imagen manipulada por dos manipuladores

El procesamiento de manipulación proporciona un marco que supervisa un subconjunto de manipuladores y los interpreta como si actuasen juntos, en lugar de independientemente. Puede crear varios objetos de procesador de manipulación simultáneamente, uno para cada elemento de la interfaz de usuario que se va a manipular en una aplicación. Un procesador de manipulación recibe información de qué dispositivos de entrada se han de observar y notifica las manipulaciones a través de eventos de .NET.

Un procesador de manipulación no tiene información sobre el elemento concreto que se está manipulando. Una aplicación aplica por separado los cambios a un elemento específico de la aplicación. Por ejemplo, una aplicación aplica transformaciones a una imagen o la dibuja de nuevo para mostrarla en su nueva ubicación o con un nuevo tamaño u orientación.

Las manipulaciones están diseñadas para transformaciones afines bidimensionales (2D). Entre estas transformaciones se incluyen la traslación, el giro y el ajuste a escala de tamaño.

Partes de una manipulación

Una manipulación es una colección de objetos Manipulator2D. Esta manipulación agregada se representa mediante un punto de origen y una elipse. El punto de origen es la posición media de todos los manipuladores que están manipulando un elemento. La elipse tiene un radio que es la distancia media desde el origen hasta cada uno de los objetos Manipulator2D.

Las partes de una manipulación.

Dos manipuladores (1 y 2), un origen y una elipse especifican una manipulación

Cuando se agregan, mueven o quitan manipuladores para un elemento de la interfaz de usuario, una aplicación actualiza el objeto ManipulationProcessor2D llamando al método ProcessManipulators(). Cuando la manipulación empieza por primera vez, se genera el evento Started.

NotaNota

El procesamiento de manipulación es más eficaz cuando se utiliza en un entorno de actualización basado en marco.Cuando se utiliza el procesamiento de manipulación en una aplicación Microsoft XNA, no supone un problema porque el marco de XNA proporciona actualizaciones basadas en marco mediante el uso del método Game.Update.En otro entorno (como WinForms), podría ser necesario proporcionar una lógica basada en marco propia para recopilar las manipulaciones y enviarlas periódicamente al método ProcessManipulators() como un lote.

Cuando cambia el número de manipuladores o su posición, se genera el evento Delta. Las propiedades del objeto Manipulation2DDeltaEventArgs que se pasa al controlador de eventos Delta especifican los cambios en el origen, el ajuste a escala, el giro y la traslación que se han producido desde el último evento. El origen de la manipulación cambia cuando se mueven los manipuladores y cuando se agregan o quitan manipuladores. Los valores de traslación especifican la magnitud del movimiento en dirección X o Y que la manipulación incluye.

Utilizando los nuevos valores, una aplicación dibuja de nuevo el elemento de la interfaz de usuario.

Una manipulación después de que el contacto A se haya desplazado a la derecha.

El manipulador 1 se mueve y hace que el origen cambie

Cuando el último manipulador asociado a la manipulación se quita del objeto ManipulationProcessor2D, se genera el evento Completed.

El modelo de procesamiento de manipulación

Un procesador de manipulación utiliza un modelo de uso directo. Con este modelo simple, una aplicación debe pasar los detalles del evento de entrada al procesador de manipulación. Los eventos de entrada pueden ser generados por cualquier elemento primitivo de entrada, como un dispositivo de mouse, un lápiz o un dedo. Este proceso proporciona un mecanismo de filtrado directo y un modelo de uso simple, por lo que la aplicación puede procesar por lotes los eventos de entrada cuando es necesario.

Para que una aplicación incluya un elemento primitivo de entrada en el proceso de manipulación, crea una estructura Manipulator2D a partir de los detalles del elemento primitivo de entrada y pasa la estructura al procesador de manipulación utilizando el método ProcessManipulators(). A continuación, el procesador de manipulación genera eventos, que la aplicación debe controlar para actualizar el componente visual de forma adecuada.

El flujo del modelo de uso directo de manipulaciones.

Modelo de procesamiento de manipulación

Inercia

El procesador de inercia permite a las aplicaciones extrapolar la ubicación, la orientación y otras propiedades de un elemento de la interfaz de usuario simulando el comportamiento en el mundo real.

Por ejemplo, cuando un usuario realiza gestos con un elemento, puede continuar moviendo, disminuyendo la velocidad y, finalmente, detener lentamente. El procesador de inercia implementa este comportamiento haciendo que los valores 2D afines (origen, ajuste a escala, traslación y giro) cambien durante un tiempo especificado en un régimen de desaceleración especificado.

Como sucede con el procesamiento de manipulación, un procesador de inercia no tiene información sobre elementos de la interfaz de usuario concretos. En respuesta a los eventos que se generan en un objeto InertiaProcessor2D, una aplicación aplica por separado los cambios a un elemento específico de la aplicación.

El procesamiento de inercia y el procesamiento de manipulación suelen utilizarse conjuntamente. Sus interfaces son similares y los eventos que generan son (en algunos casos) idénticos. Por lo general, el procesamiento de inercia comienza cuando se completa la manipulación del elemento de la interfaz de usuario. Esto se logra escuchando el evento Completed e iniciando el procesamiento de inercia de ese controlador de eventos.

Vea también

Referencia

System.Windows.Input.Manipulations