Zdarzenia gestów obsługuje się tak samo, jak proste zdarzenia dotyku. Aplikacja może wykrywać szereg zdarzeń gestów zdefiniowanych jako stałe typów zdarzeń w klasach
TransformGestureEvent
,
GestureEvent
i
PressAndTapGestureEvent
.
Aby obsłużyć zdarzenia gestu:
-
Skonfiguruj aplikację do obsługi gestów, przypisując właściwości
flash.ui.Multitouch.inputMode
wartość
MultitouchInputMode.GESTURE
.
-
Dołącz detektor zdarzeń do instancji klasy, która dziedziczy właściwości z klasy InteractiveObject, takiej jak Sprite lub TextField.
-
Określ typ zdarzenia gestu, które ma być obsługiwane.
-
Wywołuj funkcję obsługi zdarzenia, która wykona oczekiwaną czynność w odpowiedzi na zdarzenie.
Poniższy przykład prezentuje wyświetlanie komunikatu w przypadku machnięcia nad kwadratem narysowanym na obiekcie
mySprite
na ekranie dotykowym:
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);
}
Zdarzenia stuknięcia dwoma palcami obsługiwane są tak samo, ale przy użyciu klasy 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);
}
Zdarzenia naciśnięcia i stuknięcia również obsługiwane są w ten sam sposób, ale przy użyciu klasy 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);
}
Uwaga:
Nie wszystkie typy zdarzeń GestureEvent, TransformGestureEvent i PressAndTapGestureEvent są obsługiwane we wszystkich środowiskach wykonawczych. Na przykład nie wszystkie urządzenia dotykowe obsługują i wykrywają machnięcie kilkoma palcami. Na takich urządzeniach zdarzenia
gestureSwipe
klasy InteractiveObject nie są obsługiwane. Aby mieć pewność, że aplikacja będzie działała prawidłowo, należy sprawdzić, czy odpowiednie zdarzenia są obsługiwane. Więcej informacji można znaleźć w sekcji
Rozwiązywanie problemów
.
Właściwości zdarzenia Gesture
Zdarzenia gestów mają mniejszy zestaw właściwości niż proste zdarzenia dotyku. Dostęp do tych właściwości uzyskuje się tak samo, poprzez obiekt zdarzenia w funkcji obsługi zdarzenia.
W poniższym kodzie obiekt
mySprite
jest obracany w miarę, jak użytkownik wykonuje nad nim gest obrotu. W polu tekstowym wyświetlany jest kąt obrotu od ostatniego gestu (podczas testowania tego kodu należy obrócić obiekt kilkakrotnie, aby zaobserwować zmianę wartości):
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();
}
Uwaga:
Nie wszystkie właściwości klasy TransformGestureEvent są obsługiwane we wszystkich środowiskach wykonawczych. Na przykład nie wszystkie urządzenia dotykowe obsługują i wykrywają gest obrotu. Na takich urządzeniach właściwość
TransformGestureEvent.rotation
nie jest obsługiwana. Aby mieć pewność, że aplikacja będzie działała prawidłowo, należy sprawdzić, czy odpowiednie właściwości są obsługiwane. Więcej informacji można znaleźć w sekcji
Rozwiązywanie problemów
.