ジェスチャは基本タッチイベントと同じ方法で処理します。
TransformGestureEvent
クラス、
GestureEvent
クラスおよび
PressAndTapGestureEvent
クラスのイベントタイプ定数で定義された一連のジェスチャイベントを監視できます。
ジェスチャタッチイベントを処理するには:
-
flash.ui.Multitouch.inputMode
プロパティを
MultitouchInputMode.GESTURE
に設定し、アプリケーションでジェスチャ入力を処理するように設定します。
-
InteractiveObject クラスからプロパティを継承しているクラス(Sprite や TextField など)のインスタンスに、イベントリスナーをアタッチします。
-
処理対象のジェスチャイベントのタイプを指定します。
-
イベントに応答して処理を行うには、イベントハンドラー関数を呼び出します。
例えば、次のコードは、タッチスクリーン上で
mySprite
に描画された四角形をスワイプしたときにメッセージを表示します。
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);
}
2 本指タップのイベントも同様に処理されますが、その場合は 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);
}
また、押しながらタップのイベントも同様に処理されますが、その場合は 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);
}
注意:
すべての GestureEvent、TransformGestureEvent および PressAndTapGestureEvent イベントタイプがすべてのランタイム環境でサポートされているわけではありません。例えば、一部のタッチ対応デバイスは、複数指のスワイプを検出できません。このようなデバイスでは、InteractiveObject の
gestureSwipe
イベントはサポートされません。アプリケーションが動作することを保証するには、特定のイベントのサポートを確認します。詳しくは、
トラブルシューティング
を参照してください。
ジェスチャイベントのプロパティ
ジェスチャイベントのイベントプロパティの範囲は、基本タッチイベントよりも狭くなっています。このプロパティには、イベントハンドラー関数の Event オブジェクトからアクセスできます。
例えば、次のコードは、ユーザーが
mySprite
上で回転ジェスチャを実行したときに、このオブジェクトを回転させます。テキストフィールドには、前回のジェスチャからの回転量(度数)が表示されます(このコードをテストするときは、オブジェクトを何度か回転させて、値が変化するのを確認してください)。
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();
}
注意:
すべての TransformGestureEvent プロパティがすべてのランタイム環境でサポートされているわけではありません。例えば、一部のタッチ対応デバイスは、画面上の回転ジェスチャを検出できません。このようなデバイスでは、
TransformGestureEvent.rotation
プロパティはサポートされません。アプリケーションが動作することを保証するには、特定のプロパティのサポートを確認します。詳しくは、
トラブルシューティング
を参照してください。