Gestione evento manovra

Flash Player 10.1 e versioni successive, Adobe AIR 2 e versioni successive

Gestite gli eventi manovra nello stesso modo degli eventi di tocco di base. Potete intercettare una serie di eventi gestuali definiti dalle costanti del tipo di evento nelle classi TransformGestureEvent , GestureEvent e PressAndTapGestureEvent .

Per gestire eventi di tocco gestuale:
  1. Configurate l'applicazione per gestire l'input gestuale impostando la proprietà flash.ui.Multitouch.inputMode su MultitouchInputMode.GESTURE .

  2. Allegate un listener di eventi a un'istanza di una classe che eredita le proprietà dalla classe InteractiveObject, ad esempio Sprite o TextField.

  3. Specificate il tipo di evento manovra da gestire.

  4. Chiamate una funzione gestore di eventi per eseguire un'azione in risposta all'evento.

Ad esempio, il codice seguente visualizza un messaggio quando il quadrato disegnato in mySprite viene toccato su uno schermo abilitato al tocco:

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); 
}

Gli eventi di tocco a due dita vengono gestiti allo stesso modo, ma utilizzano la classe 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); 
}

Anche gli eventi premi e tocca vengono gestiti allo stesso modo, ma utilizzano la classe 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: non tutti i tipi di eventi GestureEvent, TransformGestureEvent e PressAndTapGestureEvent sono supportati in tutti gli ambienti di runtime. Ad esempio, non tutti i dispositivi abilitati al tocco sono in grado di rilevare una strisciata a più dita. Pertanto, gli eventi gestureSwipe di InteractiveObject non sono supportati in questi dispositivi. Provate a controllare il supporto evento specifico per verificare che l'applicazione funzioni e vedete Risoluzione dei problemi per ulteriori informazioni.

Proprietà evento manovra

L'ambito delle proprietà evento degli eventi manovra è più piccolo di quello degli eventi di tocco di base. Potete accedervi allo stesso modo, mediante l'oggetto evento nella funzione gestore di eventi.

Ad esempio, il codice seguente ruota mySprite quando l'utente esegue una manovra di rotazione su di esso. Il campo di testo mostra la quantità di rotazione dall'ultima manovra (quando verificate il codice, ruotatelo diverse volte per visualizzare i cambiamenti nei valori):

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: non tutte le proprietà TransformGestureEvent sono supportate in tutti gli ambienti di runtime. Ad esempio, non tutti i dispositivi abilitati al tocco sono in grado di rilevare la rotazione di una manovra sullo schermo. Pertanto, la proprietà TransformGestureEvent.rotation non è supportata su questi dispositivi. Controllate il supporto proprietà specifico per verificare che l'applicazione funzioni e vedete Risoluzione dei problemi per ulteriori informazioni.

Fasi manovra

Gli eventi manovra possono anche essere registrati mediante fasi, pertanto potete tenere traccia delle proprietà durante l'esecuzione della manovra. Ad esempio, potete tenere traccia delle coordinate x quando un oggetto viene spostato con una manovra di strisciata. Utilizzate questi valori per disegnare una riga attraverso tutti i punti nel suo percorso al termine della strisciata. Oppure, modificate in maniera visiva un oggetto di visualizzazione quando viene trascinato sullo schermo utilizzando una manovra di scorrimento. Al termine della manovra di scorrimento, modificate nuovamente l'oggetto.
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 frequenza della fase di aggiornamento dipende dall'ambiente di runtime. Alcune combinazioni di sistema operativo e hardware non inoltrano nessun aggiornamento.

La fase manovra è “all” per eventi manovra semplici

Alcuni oggetti evento manovra non tengono traccia delle singole fasi dell'evento manovra, ma piuttosto compilano la proprietà phase dell'oggetto evento con il valore all. Le semplici manovre di strisciata e tocco con due dita non registrano l'evento per più fasi. La proprietà phase dell'oggetto evento per un'intercettazione InteractiveObject degli eventi gestureSwipe o gestureTwoFingerTap è sempre all dopo che l'evento è stato inviato:

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" 
}