Verarbeitung von Gestenereignissen

Flash Player 10.1 und höher, Adobe AIR 2 und höher

Gestenereignisse werden genauso verarbeitet wie einfache Berührungsereignisse. Sie können auf eine Serie von Gestenereignissen warten, die durch Ereignistypkonstanten in den Klassen TransformGestureEvent , GestureEvent und PressAndTapGestureEvent definiert sind.

Verarbeiten eines Gestenberührungsereignisses:
  1. Stellen Sie die flash.ui.Multitouch.inputMode -Eigenschaft auf MultitouchInputMode.GESTURE ein, damit Ihre Anwendung die Gesteneingabe verarbeiten kann.

  2. Fügen Sie einen Ereignis-Listener an eine Instanz einer Klasse an, die Eigenschaften von der InteractiveObject-Klasse erbt, wie beispielsweise Sprite oder TextField.

  3. Geben Sie den Typ des zu verarbeitenden Gestenereignisses an.

  4. Rufen Sie eine Ereignisprozedurfunktion auf, die auf das Ereignis reagiert.

Mit dem folgenden Code wird beispielsweise eine Meldung eingeblendet, wenn der Benutzer auf einem berührungsempfindlichen Bildschirm eine Swipe-Bewegung über das Quadrat auf mySprite durchführt:

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

Tippereignisse mit zwei Fingern werden genauso verarbeitet, verwenden aber die GestureEvent-Klasse:

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

Ereignisse, die aus Drücken und Tippen bestehen, werden ebenfalls genauso verarbeitet, sie verwenden jedoch die PressAndTapGestureEvent-Klasse:

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); 
}
Hinweis: Nicht alle GestureEvent-, TransformGestureEvent- und PressAndTapGestureEvent-Ereignistypen werden in allen Laufzeitumgebungen unterstützt. Beispielsweise können nicht alle berührungsempfindlichen Geräte eine Swipe-Bewegung mit mehreren Fingern erkennen. Die InteractiveObject-Ereignisse gestureSwipe werden deshalb auf diesen Geräten nicht unterstützt. Überprüfen Sie, ob bestimmte Ereignisse unterstützt werden, um sicherzustellen, dass Ihre Anwendung funktioniert. Weitere Informationen finden Sie unter Fehlerbehebung .

Eigenschaften von Gestenereignissen

Für Gestenereignisse sind weniger Eigenschaften verfügbar als für einfache Berührungsereignisse. Der Zugriff erfolgt auf dieselbe Weise über das Ereignisobjekt in der Ereignisprozedurfunktion.

Mit dem folgenden Code wird beispielsweise mySprite gedreht, wenn der Benutzer eine Drehgeste ausführt. Das Textfeld zeigt den Drehbetrag seit der letzten Geste (drehen Sie das Objekt beim Testen dieses Codes mehrmals, um zu sehen, wie die Werte sich ändern):

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(); 
}
Hinweis: Nicht alle TransformGestureEvent-Eigenschaften werden in allen Laufzeitumgebungen unterstützt. Beispielsweise sind nicht alle berührungsempfindlichen Geräte in der Lage, eine Drehgeste auf dem Bildschirm zu erkennen. Deshalb wird die TransformGestureEvent.rotation -Eigenschaft auf diesen Geräten nicht unterstützt. Überprüfen Sie, ob bestimmte Eigenschaften unterstützt werden, um sicherzustellen, dass Ihre Anwendung funktioniert. Weitere Informationen finden Sie unter Fehlerbehebung .

Gestenphasen

Gestenereignisse können auch über Phasen verfolgt werden; so können Sie während der Ausführung der Geste Eigenschaften verfolgen. Beispielsweise können Sie die x-Koordinaten verfolgen, während das Objekt mit einer Swipe-Bewegung verschoben wird. Verwenden Sie diese Werte, um nach Ende der Swipe-Bewegung eine Linie durch alle Punkte in der Bewegungsbahn zu zeichnen. Oder Sie können die visuelle Darstellung eines Anzeigeobjekts ändern, während es mit einer Schwenkgeste über den Bildschirm gezogen wird. Ändern Sie die Objektdarstellung erneut, wenn die Schwenkgeste abgeschlossen ist.
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; 
} 
}
Hinweis: Die Frequenz der Aktualisierungsphase richtet sich nach der Laufzeitumgebung. Bei einigen Kombinationen aus Betriebssystem und Hardware werden Aktualisierungen überhaupt nicht weitergegeben.

Wert „all“ für Gestenphase bei einfachen Gestenereignissen

Bei einigen Gestenereignisobjekten werden einzelne Phasen des Gestenereignisses nicht verfolgt; stattdessen wird die phase-Eigenschaft des Ereignisobjekts mit dem Wert „all“ gefüllt. Bei einfachen Swipe-Gesten oder beim einfachen Tippen mit zwei Fingern wird das Ereignis nicht anhand von mehreren Phasen verfolgt. Die phase -Eigenschaft des Ereignisobjekts für ein InteractiveObject, das auf gestureSwipe - oder gestureTwoFingerTap -Ereignisse wartet, lautet immer all , nachdem das Ereignis ausgelöst wurde:

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