Bewegingsgebeurtenissen afhandelen

Flash Player 10.1 of hoger, Adobe AIR 2 of hoger

Bewegingsgebeurtenissen worden op dezelfde manier afgehandeld als basisaanraakgebeurtenissen. U kunt luisteren naar een reeks bewegingsgebeurtenissen die worden gedefinieerd door de constanten voor het gebeurtenistype in de TransformGestureEvent -klasse, de GestureEvent -klasse en de PressAndTapGestureEvent -klasse.

Als u een bewegingsgebeurtenis wilt afhandelen, gaat u als volgt te werk:
  1. Configureer uw toepassing voor het afhandelen van bewegingsinvoer door de eigenschap flash.ui.Multitouch.inputMode in te stellen op MultitouchInputMode.GESTURE .

  2. Koppel een gebeurtenislistener aan een klasseninstantie die de eigenschappen van de InteractiveObject-klasse overneemt, zoals bijvoorbeeld Sprite of TextField.

  3. Geef aan welk type bewegingsgebeurtenis moet worden afgehandeld.

  4. Roep een gebeurtenisafhandelingsfunctie aan om te reageren op de gebeurtenis.

Met de volgende code wordt een bericht weergegeven als het vierkant op mySprite wordt weggezwiept op een aanraakscherm.

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

Tikgebeurtenissen met twee vingers worden op dezelfde manier afgehandeld, maar maken wel gebruik van de 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); 
}

Druk- en tikgebeurtenissen worden ook op dezelfde manier afgehandeld, maar hierbij wordt gebruik gemaakt van de 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); 
}
Opmerking: Niet alle GestureEvent-, TransformGestureEvent- en PressAndTapGestureEvent-gebeurtenistypen worden in alle runtimeomgevingen ondersteund. Een zwiepbeweging met meerdere vingers wordt bijvoorbeeld niet herkend door alle aanraakapparaten. Op deze apparaten worden InteractiveObject gestureSwipe -gebeurtenissen daarom ook niet ondersteund. Test of specifieke gebeurtenissen worden ondersteund. Zo weet u zeker dat uw toepassing werkt. Ga naar Problemen oplossen voor meer informatie.

Eigenschappen van bewegingsgebeurtenissen

Bewegingsgebeurtenissen hebben een kleiner bereik aan gebeurteniseigenschappen dan basisaanraakgebeurtenissen. Deze gebeurtenissen zijn op dezelfde manier toegankelijk, namelijk via het gebeurtenisobject in de gebeurtenisafhandelingsfunctie.

Met de volgende code wordt mySprite geroteerd wanneer de gebruiker er een draaibeweging op uitvoert. Het tekstveld laat zien hoeveel het object is gedraaid sinds de laatste beweging (wanneer u deze code test, kunt u het object enkele keren draaien om de kijken hoe de waarden veranderen):

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(); 
}
Opmerking: Niet alle TransformGestureEvent -eigenschappen worden in alle runtimeomgevingen ondersteund. Een draaibeweging wordt bijvoorbeeld niet herkend door alle aanraakapparaten. Op deze apparaten wordt de eigenschap TransformGestureEvent.rotation dan ook niet ondersteund. Test of specifieke eigenschappen worden ondersteund. Zo weet u zeker dat uw toepassing werkt. Ga naar Problemen oplossen voor meer informatie.

Bewegingsfasen

Bovendien kunnen de bewegingsgebeurtenissen worden bijgehouden tijdens de verschillende fasen, zodat u de eigenschappen tijdens de beweging kunt bijhouden. U kunt bijvoorbeeld de x-coördinaten bijhouden terwijl een object wordt verplaatst met een zwiepbeweging. Met de bijgehouden waarden kunt u een lijn trekken door alle punten in het pad nadat de zwiepbeweging is voltooid. U kunt ook een object visueel wijzigen wanneer het object met een panbeweging over het scherm wordt gesleept. Wijzig het object nogmaals wanneer de panbeweging is voltooid.
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; 
} 
}
Opmerking: De frequentie van de updatefase is afhankelijk van de runtimeomgeving. Bij sommige besturingssystemen en hardwarecombinaties worden updates helemaal niet verzonden.

Bewegingsfase “all” bij eenvoudige bewegingsgebeurtenissen

Bij sommige bewegingsgebeurtenisobjecten worden de individuele fasen van de bewegingsgebeurtenis niet bijgehouden. In plaats hiervan krijgt de fase-eigenschap van het gebeurtenisobject de waarde 'all'. Bij de eenvoudige zwiepbeweging en het tikken met twee vingers worden de verschillende fasen van een gebeurtenis niet bijgehouden. De phase -eigenschap van het gebeurtenisobject van een InteractiveObject-luisterhandeling naar de gebeurtenissen gestureSwipe of gestureTwoFingerTap is altijd ingesteld op all wanneer de gebeurtenis wordt verzonden:

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