Gestión de eventos de gestos

Flash Player 10.1 y posterior, Adobe AIR 2 y posterior

Gestione los eventos de gestos del mismo modo que lo haría con eventos táctiles básicos. Puede detectar una serie de eventos de gestos definidos por las constantes de tipo de evento en las clases TransformGestureEvent , GestureEvent y PressAndTapGestureEvent .

Para gestionar un evento táctil de gesto:
  1. Defina la aplicación para que gestione entrada de gestos estableciendo la propiedad flash.ui.Multitouch.inputMode como MultitouchInputMode.GESTURE .

  2. Asocie un detector de eventos a la instancia de una clase que herede propiedades de la clase InteractiveObject, por ejemplo, Sprite o TextField.

  3. Especifique el tipo de evento de gesto que va a gestionar.

  4. Llame a una función de controlador de eventos para hacer algo como respuesta al evento.

Por ejemplo, el siguiente código muestra un mensaje cuando el cuadrado dibujado en mySprite se toca en un dispositivo táctil:

Multitouch.inputMode=MultitouchInputMode.GESTURE; 
 
var mySprite:Sprite = new Sprite(); 
var myTextField:TextField = new TextField(); 
 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0,0,40,40); 
addChild(mySprite); 
 
mySprite.addEventListener(TransformGestureEvent.GESTURE_SWIPE, swipehandler); 
 
function swipehandler(evt:TransformGestureEvent): void { 
myTextField.text = "I've been swiped"; 
myTextField.y = 50; 
addChild(myTextField); 
}

Los eventos de toque con dos dedos se gestionan del mismo modo, pero con la clase GestureEvent:

Multitouch.inputMode=MultitouchInputMode.GESTURE; 
 
var mySprite:Sprite = new Sprite(); 
var myTextField:TextField = new TextField(); 
 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0,0,40,40); 
addChild(mySprite); 
 
mySprite.addEventListener(GestureEvent.    GESTURE_TWO_FINGER_TAP, taphandler); 
 
function taphandler(evt:GestureEvent): void { 
myTextField.text = "I've been two-finger tapped"; 
myTextField.y = 50; 
addChild(myTextField); 
}

Los eventos de pulsar y tocar también se gestionan del mismo modo, pero con la clase PressAndTapGestureEvent:

Multitouch.inputMode=MultitouchInputMode.GESTURE; 
 
var mySprite:Sprite = new Sprite(); 
var myTextField:TextField = new TextField(); 
 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0,0,40,40); 
addChild(mySprite); 
 
mySprite.addEventListener(PressAndTapGestureEvent.        GESTURE_PRESS_AND_TAP, taphandler); 
 
function taphandler(evt:PressAndTapGestureEvent): void { 
myTextField.text = "I've been press-and-tapped"; 
myTextField.y = 50; 
addChild(myTextField); 
}
Nota: no todos los eventos GestureEvent, TransformGestureEvent y PressAndTapGestureEvent se admiten en todos los entornos de motor de ejecución. Por ejemplo, no todos los dispositivos táctiles pueden detectar toques con varios dedos. Por ello, los eventos gestureSwipe de InteractiveObject no se admiten en dichos dispositivos. Intente probar un evento concreto para garantizar que la aplicación funciona y consulte Solución de problemas para obtener más información.

Propiedades de eventos de gestos

Los eventos de gestos tienen un ámbito más reducido de propiedades de eventos que los eventos táctiles básicos. Puede acceder del mismo modo, desde el objeto de evento en la función del controlador de eventos.

Por ejemplo, el siguiente código gira mySprite cuando el usuario lleva a cabo un gesto de giro. El campo de texto muestra la cantidad de giro desde el último gesto (cuando pruebe este código, gírelo varias veces para ver el cambio en los valores):

Multitouch.inputMode=MultitouchInputMode.GESTURE; 
 
var mySprite:Sprite = new Sprite(); 
var mySpriteCon:Sprite = new Sprite(); 
var myTextField:TextField = new TextField(); 
myTextField.y = 50; 
addChild(myTextField); 
 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(-20,-20,40,40); 
mySpriteCon.addChild(mySprite); 
mySprite.x = 20; 
mySprite.y = 20; 
addChild(mySpriteCon); 
 
mySprite.addEventListener(TransformGestureEvent.GESTURE_ROTATE, rothandler); 
 
function rothandler(evt:TransformGestureEvent): void { 
evt.target.parent.rotationZ += evt.target.rotation; 
myTextField.text = evt.target.parent.rotation.toString(); 
}
Nota: no todas las propiedades TransformGestureEvent se admiten en todos los entornos de motor de ejecución. Por ejemplo, no todos los dispositivos táctiles pueden detectar el giro de un gesto en la pantalla. Por ello, la propiedad TransformGestureEvent.rotation no se admite en estos dispositivos. Intente probar una propiedad concreta para garantizar que la aplicación funciona y consulte Solución de problemas para obtener más información.

Fases de gestos

Además, los eventos de gestos se pueden supervisar por fases y sus propiedades se analizan a medida que se produce el gesto. Por ejemplo, puede supervisar coordenadas x a medida que un objeto se mueve con un gesto de barrido. Utilice estos valores para dibujar una línea en todos los puntos del trazado una vez finalizado el barrido. O cambie visualmente un objeto de visualización a medida que se arrastra por la pantalla con un gesto de desplazamiento. Cambie el objeto de nuevo cuando haya terminado el gesto de desplazamiento.
Multitouch.inputMode = MultitouchInputMode.GESTURE; 
var mySprite = new Sprite(); 
mySprite.addEventListener(TransformGestureEvent.GESTURE_PAN , onPan); 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0, 0, 40, 40); 
var myTextField = new TextField(); 
myTextField.y = 200; 
addChild(mySprite); 
addChild(myTextField); 
 
function onPan(evt:TransformGestureEvent):void { 
 
    evt.target.localX++; 
 
if (evt.phase==GesturePhase.BEGIN) { 
    myTextField.text = "Begin"; 
    evt.target.scaleX *= 1.5; 
    evt.target.scaleY *= 1.5; 
} 
if (evt.phase==GesturePhase.UPDATE) { 
    myTextField.text = "Update"; 
    evt.target.alpha = 0.5; 
} 
if (evt.phase==GesturePhase.END) { 
    myTextField.text = "End"; 
    evt.target.width = 40; 
    evt.target.height = 40; 
    evt.target.alpha = 1; 
} 
}
Nota: la frecuencia de la fase de actualización depende del entorno del motor de ejecución. Algunas combinaciones de sistema operativo y hardware no permiten actualización alguna.

La fase de gestos lo es “todo” para los eventos de gestos sencillos

Algunos objetos de eventos de gestos no siguen fases individuales del evento de gesto, sino que llenan la propiedad phase del objeto evento con el valor all. Los gestos sencillos de barrido y toque con dos dedos no siguen las distintas fases del evento. La propiedad phase del objeto de evento para un objeto InteractiveObject que detecta eventos gestureSwipe o gestureTwoFingerTap siempre es all una vez distribuido el evento:

Multitouch.inputMode = MultitouchInputMode.GESTURE; 
var mySprite = new Sprite(); 
mySprite.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe); 
mySprite.addEventListener(GestureEvent.GESTURE_TWO_FINGER_TAP, onTwoTap); 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0, 0, 40, 40); 
var myTextField = new TextField(); 
myTextField.y = 200; 
addChild(mySprite); 
addChild(myTextField); 
 
function onSwipe(swipeEvt:TransformGestureEvent):void { 
    myTextField.text = swipeEvt.phase // Output is "all" 
} 
function onTwoTap(tapEvt:GestureEvent):void { 
    myTextField.text = tapEvt.phase // Output is "all" 
}