处理手势事件的方式与处理基本触摸事件相同。您可以侦听由
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);
}
以相同的方式处理二指点击事件,但要使用 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
事件。尝试测试是否支持特定事件以确保您的应用程序能够正常工作,有关详细信息,请参阅
疑难解答
。
Gesture 事件属性
手势事件的事件属性范围比基本触摸事件小。您可以通过事件处理函数中的事件对象以相同的方式访问这些属性。
例如,以下代码在用户对
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
属性。尝试测试是否支持特定属性以确保您的应用程序能够正常工作,有关详细信息,请参阅
疑难解答
。