ActionScript® 3.0 Reference for the Adobe® Flash® Platform
Home  |  Show Packages and Classes List |  Packages  |  Classes  |  What's New  |  Index  |  Appendixes
flash.events 

TransformGestureEvent  - AS3

Packageflash.events
Classpublic class TransformGestureEvent
InheritanceTransformGestureEvent Inheritance GestureEvent Inheritance Event Inheritance Object

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

The TransformGestureEvent class lets you handle complex movement input events (such as moving fingers across a touch screen) that the device or operating system interprets as a gesture. A gesture can have one or more touch points. When a user interacts with a device such as a mobile phone or tablet with a touch screen, the user typically touches and moves across the screen with his or her fingers or a pointing device. You can develop applications that respond to this user interaction with the GestureEvent, PressAndTapGestureEvent, and TransformGestureEvent classes. Create event listeners using the event types defined here, or in the related GestureEvent and TouchEvent classes. And, use the properties and methods of these classes to construct event handlers that respond to the user touching the device.

A device or operating system interprets gesture input. So, different devices or operating systems have different requirements for individual gesture types. A swipe on one device might require different input movement than a swipe on another device. Refer to the hardware or operating system documentation to discover how the device or operating system interprets contact as a specific gesture.

Use the Multitouch class to determine the current environment's support for touch interaction, and to manage the support of touch interaction if the current environment supports it.

Note: When objects are nested on the display list, touch events target the deepest possible nested object that is visible in the display list. This object is called the target node. To have a target node's ancestor (an object containing the target node in the display list) receive notification of a touch event, use EventDispatcher.addEventListener() on the ancestor node with the type parameter set to the specific touch event you want to detect.

While the user is in contact with the device, the TransformGestureEvent object's scale, rotation, and offset properties are incremental values from the previous gesture event. For example, as a gesture increases the size of a display object, the scale values might go in sequence 1.03, 1.01, 1.01, 1.02 indicating the display object scaled 1.0717 times its original size by the end of the gesture.

For TransformGestureEvent objects, properties not modified by the current gesture are set to identity values. For example, a pan gesture does not have a rotation or scale transformation, so the rotation value of the event object is 0, the scaleX and scaleY properties are 1.

View the examples

More examples

Related API Elements



Public Properties
 PropertyDefined By
 InheritedaltKey : Boolean
Indicates whether the Alt key is active (true) or inactive (false).
GestureEvent
 Inheritedbubbles : Boolean
[read-only] Indicates whether an event is a bubbling event.
Event
 Inheritedcancelable : Boolean
[read-only] Indicates whether the behavior associated with the event can be prevented.
Event
 Inherited    commandKey : Boolean
Indicates whether the command key is activated (Mac only).
GestureEvent
 Inheritedconstructor : Object
A reference to the class object or constructor function for a given object instance.
Object
 InheritedcontrolKey : Boolean
Indicates whether the Control key is activated on Mac and whether the Ctrl key is activated on Windows or Linux.
GestureEvent
 InheritedctrlKey : Boolean
On Windows or Linux, indicates whether the Ctrl key is active (true) or inactive (false).
GestureEvent
 InheritedcurrentTarget : Object
[read-only] The object that is actively processing the Event object with an event listener.
Event
 InheritedeventPhase : uint
[read-only] The current phase in the event flow.
Event
 InheritedlocalX : Number
The horizontal coordinate at which the event occurred relative to the containing sprite.
GestureEvent
 InheritedlocalY : Number
The vertical coordinate at which the event occurred relative to the containing sprite.
GestureEvent
  offsetX : Number
The horizontal translation of the display object, since the previous gesture event.
TransformGestureEvent
  offsetY : Number
The vertical translation of the display object, since the previous gesture event.
TransformGestureEvent
 Inheritedphase : String
A value from the GesturePhase class indicating the progress of the touch gesture.
GestureEvent
  rotation : Number
The current rotation angle, in degrees, of the display object along the z-axis, since the previous gesture event.
TransformGestureEvent
  scaleX : Number
The horizontal scale of the display object, since the previous gesture event.
TransformGestureEvent
  scaleY : Number
The vertical scale of the display object, since the previous gesture event.
TransformGestureEvent
 InheritedshiftKey : Boolean
Indicates whether the Shift key is active (true) or inactive (false).
GestureEvent
 InheritedstageX : Number
[read-only] The horizontal coordinate at which the event occurred in global Stage coordinates.
GestureEvent
 InheritedstageY : Number
[read-only] The vertical coordinate at which the event occurred in global Stage coordinates.
GestureEvent
 Inheritedtarget : Object
[read-only] The event target.
Event
 Inheritedtype : String
[read-only] The type of event.
Event
Public Methods
 MethodDefined By
  
TransformGestureEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = false, phase:String = null, localX:Number = 0, localY:Number = 0, scaleX:Number = 1.0, scaleY:Number = 1.0, rotation:Number = 0, offsetX:Number = 0, offsetY:Number = 0, ctrlKey:Boolean = false, altKey:Boolean = false, shiftKey:Boolean = false, commandKey:Boolean = false, controlKey:Boolean = false)
Creates an Event object that contains information about complex multi-touch events, such as a user sliding his or her finger across a screen.
TransformGestureEvent
  
[override] Creates a copy of the TransformGestureEvent object and sets the value of each property to match that of the original.
TransformGestureEvent
 Inherited
formatToString(className:String, ... arguments):String
A utility function for implementing the toString() method in custom ActionScript 3.0 Event classes.
Event
 Inherited
Indicates whether an object has a specified property defined.
Object
 Inherited
Checks whether the preventDefault() method has been called on the event.
Event
 Inherited
Indicates whether an instance of the Object class is in the prototype chain of the object specified as the parameter.
Object
 Inherited
Cancels an event's default behavior if that behavior can be canceled.
Event
 Inherited
Indicates whether the specified property exists and is enumerable.
Object
 Inherited
Sets the availability of a dynamic property for loop operations.
Object
 Inherited
Prevents processing of any event listeners in the current node and any subsequent nodes in the event flow.
Event
 Inherited
Prevents processing of any event listeners in nodes subsequent to the current node in the event flow.
Event
 Inherited
Returns the string representation of this object, formatted according to locale-specific conventions.
Object
  
[override] Returns a string that contains all the properties of the TransformGestureEvent object.
TransformGestureEvent
 Inherited
Refreshes the Flash runtime display after processing the gesture event, in case the display list has been modified by the event handler.
GestureEvent
 Inherited
Returns the primitive value of the specified object.
Object
Public Constants
 ConstantDefined By
  GESTURE_PAN : String = "gesturePan"
[static] Defines the value of the type property of a GESTURE_PAN touch event object.
TransformGestureEvent
  GESTURE_ROTATE : String = "gestureRotate"
[static] Defines the value of the type property of a GESTURE_ROTATE touch event object.
TransformGestureEvent
  GESTURE_SWIPE : String = "gestureSwipe"
[static] Defines the value of the type property of a GESTURE_SWIPE touch event object.
TransformGestureEvent
  GESTURE_ZOOM : String = "gestureZoom"
[static] Defines the value of the type property of a GESTURE_ZOOM touch event object.
TransformGestureEvent
Property Detail

offsetX

property
offsetX:Number

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

The horizontal translation of the display object, since the previous gesture event.



Implementation
    public function get offsetX():Number
    public function set offsetX(value:Number):void

offsetY

property 
offsetY:Number

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

The vertical translation of the display object, since the previous gesture event.



Implementation
    public function get offsetY():Number
    public function set offsetY(value:Number):void

rotation

property 
rotation:Number

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

The current rotation angle, in degrees, of the display object along the z-axis, since the previous gesture event.



Implementation
    public function get rotation():Number
    public function set rotation(value:Number):void

scaleX

property 
scaleX:Number

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

The horizontal scale of the display object, since the previous gesture event.



Implementation
    public function get scaleX():Number
    public function set scaleX(value:Number):void

scaleY

property 
scaleY:Number

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

The vertical scale of the display object, since the previous gesture event.



Implementation
    public function get scaleY():Number
    public function set scaleY(value:Number):void
Constructor Detail

TransformGestureEvent

()Constructor
public function TransformGestureEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = false, phase:String = null, localX:Number = 0, localY:Number = 0, scaleX:Number = 1.0, scaleY:Number = 1.0, rotation:Number = 0, offsetX:Number = 0, offsetY:Number = 0, ctrlKey:Boolean = false, altKey:Boolean = false, shiftKey:Boolean = false, commandKey:Boolean = false, controlKey:Boolean = false)

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

Creates an Event object that contains information about complex multi-touch events, such as a user sliding his or her finger across a screen. Event objects are passed as parameters to event listeners.

Parameters
type:String — The type of the event. Possible values are: TransformGestureEvent.GESTURE_PAN, TransformGestureEvent.GESTURE_ROTATE, TransformGestureEvent.GESTURE_SWIPE and TransformGestureEvent.GESTURE_ZOOM.
 
bubbles:Boolean (default = true) — Determines whether the Event object participates in the bubbling phase of the event flow.
 
cancelable:Boolean (default = false) — Determines whether the Event object can be canceled.
 
phase:String (default = null) — This values tracks the beginning, progress, and end of a touch gesture. Possible values are: GesturePhase.BEGIN, GesturePhase.END, and GesturePhase.UPDATE.
 
localX:Number (default = 0) — The horizontal coordinate at which the event occurred relative to the containing display object.
 
localY:Number (default = 0) — The vertical coordinate at which the event occurred relative to the containing display object.
 
scaleX:Number (default = 1.0) — The horizontal scale of the display object.
 
scaleY:Number (default = 1.0) — The vertical scale of the display object.
 
rotation:Number (default = 0) — The current rotation angle, in degrees, of the display object along the z-axis.
 
offsetX:Number (default = 0) — The horizontal translation of the display object from its original position.
 
offsetY:Number (default = 0) — The vertical translation of the display object from its original position.
 
ctrlKey:Boolean (default = false) — On Windows or Linux, indicates whether the Ctrl key is activated. On Mac, indicates whether either the Ctrl key or the Command key is activated.
 
altKey:Boolean (default = false) — Indicates whether the Alt key is activated (Windows or Linux only).
 
shiftKey:Boolean (default = false) — Indicates whether the Shift key is activated.
 
commandKey:Boolean (default = false) — (AIR only) Indicates whether the Command key is activated (Mac only). This parameter is for Adobe AIR only; do not set it for Flash Player content.
 
controlKey:Boolean (default = false) — (AIR only) Indicates whether the Control or Ctrl key is activated. This parameter is for Adobe AIR only; do not set it for Flash Player content.

Related API Elements

Method Detail

clone

()method
override public function clone():Event

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

Creates a copy of the TransformGestureEvent object and sets the value of each property to match that of the original.

Returns
Event — A new TransformGestureEvent object with property values that match those of the original.

toString

()method 
override public function toString():String

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

Returns a string that contains all the properties of the TransformGestureEvent object. The string is in the following format:

[TransformGestureEvent type=value bubbles=value cancelable=value ... ]

Returns
String — A string that contains all the properties of the TransformGestureEvent object.
Constant Detail

GESTURE_PAN

Constant
public static const GESTURE_PAN:String = "gesturePan"

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

Defines the value of the type property of a GESTURE_PAN touch event object.

The dispatched TransformGestureEvent object has the following properties:

PropertyValue
altKeytrue if the Alt key is active (Windows or Linux).
bubblestrue
cancelablefalse; there is no default behavior to cancel.
commandKeytrue on the Mac if the Command key is active; false if it is inactive. Always false on Windows.
controlKeytrue if the Ctrl or Control key is active; false if it is inactive.
ctrlKeytrue on Windows or Linux if the Ctrl key is active. true on Mac if either the Ctrl key or the Command key is active. Otherwise, false.
currentTargetThe object that is actively processing the Event object with an event listener.
phaseThe current phase in the event flow; a value from the GesturePhase class.
localXThe horizontal coordinate at which the event occurred relative to the containing display object.
localYThe vertical coordinate at which the event occurred relative to the containing display object.
scaleXThe horizontal scale of the display object since the previous gesture event. For pan gestures this value is 1.
scaleYThe vertical scale of the display object since the previous gesture event. For pan gestures this value is 1.
rotationThe current rotation angle, in degrees, of the display object along the z-axis, since the previous gesture event. For pan gestures this value is 0.
offsetXThe horizontal translation of the display object from its position at the previous gesture event.
offsetYThe vertical translation of the display object from its position at the previous gesture event.
shiftKeytrue if the Shift key is active; false if it is inactive.
targetThe InteractiveObject instance under the touching device. The target is not always the object in the display list that registered the event listener. Use the currentTarget property to access the object in the display list that is currently processing the event.

Related API Elements


Example  ( How to use this example )

The following example shows event handling for the GESTURE_PAN events. While the user performs a pan gesture on the touch-enabled device, myTextField populates with the current phase.
Multitouch.inputMode = MultitouchInputMode.GESTURE;

var mySprite = new Sprite();
mySprite.addEventListener(TransformGestureEvent.GESTURE_PAN , onPan);
mySprite.graphics.beginFill(0x336699);
mySprite.graphics.drawRect(0, 0, 100, 80);
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";
    }
    if (evt.phase==GesturePhase.UPDATE) {
        myTextField.text = "Update";
    }
    if (evt.phase==GesturePhase.END) {
        myTextField.text = "End";
    }
}

GESTURE_ROTATE

Constant 
public static const GESTURE_ROTATE:String = "gestureRotate"

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

Defines the value of the type property of a GESTURE_ROTATE touch event object.

During this event, the rotation property contains the rotation angle. The rotation values are as follows:

  • 0 to 180 degrees for clockwise direction
  • - 180 to 0 degrees for counter-clockwise direction

The dispatched TransformGestureEvent object has the following properties:

PropertyValue
altKeytrue if the Alt key is active (Windows or Linux).
bubblestrue
cancelablefalse; there is no default behavior to cancel.
commandKeytrue on the Mac if the Command key is active; false if it is inactive. Always false on Windows.
controlKeytrue if the Ctrl or Control key is active; false if it is inactive.
ctrlKeytrue on Windows or Linux if the Ctrl key is active. true on Mac if either the Ctrl key or the Command key is active. Otherwise, false.
currentTargetThe object that is actively processing the Event object with an event listener.
phaseThe current phase in the event flow; a value from the GesturePhase class.
localXThe horizontal coordinate at which the event occurred relative to the containing display object.
localYThe vertical coordinate at which the event occurred relative to the containing display object.
scaleXThe horizontal scale of the display object since the previous gesture event.
scaleYThe vertical scale of the display object since the previous gesture event.
rotationThe current rotation angle, in degrees, of the display object along the z-axis, since the previous gesture event.
offsetXThe horizontal translation of the display object from its position at the previous gesture event.
offsetYThe vertical translation of the display object from its position at the previous gesture event.
shiftKeytrue if the Shift key is active; false if it is inactive.
targetThe InteractiveObject instance under the touching device. The target is not always the object in the display list that registered the event listener. Use the currentTarget property to access the object in the display list that is currently processing the event.

Related API Elements


Example  ( How to use this example )

The following example shows event handling for the GESTURE_ROTATE events. While the user performs a rotation gesture on the touch-enabled device, mySprite rotates and myTextField populates with the current phase.
Multitouch.inputMode = MultitouchInputMode.GESTURE;

var mySprite = new Sprite();
mySprite.addEventListener(TransformGestureEvent.GESTURE_ROTATE , onRotate );
mySprite.graphics.beginFill(0x336699);
mySprite.graphics.drawRect(0, 0, 100, 80);
var myTextField = new TextField();
myTextField.y = 200;
addChild(mySprite);
addChild(myTextField);

function onRotate(evt:TransformGestureEvent):void {

    evt.target.rotation -= 45;

    if (evt.phase==GesturePhase.BEGIN) {
        myTextField.text = "Begin";
    }
    if (evt.phase==GesturePhase.UPDATE) {
        myTextField.text = "Update";
    }
    if (evt.phase==GesturePhase.END) {
        myTextField.text = "End";
    }
}

GESTURE_SWIPE

Constant 
public static const GESTURE_SWIPE:String = "gestureSwipe"

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

Defines the value of the type property of a GESTURE_SWIPE touch event object.

The dispatched TransformGestureEvent object has the following properties:

PropertyValue
altKeytrue if the Alt key is active (Windows or Linux).
bubblestrue
cancelablefalse; there is no default behavior to cancel.
commandKeytrue on the Mac if the Command key is active; false if it is inactive. Always false on Windows.
controlKeytrue if the Ctrl or Control key is active; false if it is inactive.
ctrlKeytrue on Windows or Linux if the Ctrl key is active. true on Mac if either the Ctrl key or the Command key is active. Otherwise, false.
currentTargetThe object that is actively processing the Event object with an event listener.
phaseThe current phase in the event flow. For swipe events, this value is always all corresponding to the value GesturePhase.ALL once the event is dispatched.
localXThe horizontal coordinate at which the event occurred relative to the containing sprite.
localYThe vertical coordinate at which the event occurred relative to the containing sprite.
scaleXThe horizontal scale of the display object. For swipe gestures this value is 1
scaleYThe vertical scale of the display object. For swipe gestures this value is 1
rotationThe current rotation angle, in degrees, of the display object along the z-axis. For swipe gestures this value is 0
offsetXIndicates horizontal direction: 1 for right and -1 for left.
offsetYIndicates vertical direction: 1 for down and -1 for up.
shiftKeytrue if the Shift key is active; false if it is inactive.
targetThe InteractiveObject instance under the touching device. The target is not always the object in the display list that registered the event listener. Use the currentTarget property to access the object in the display list that is currently processing the event.

Related API Elements


Example  ( How to use this example )

The following example shows event handling for the GESTURE_SWIPE events. While the user performs a swipe gesture on the touch-enabled device, myTextField populates with the phase all, which is the only phase for swipe events.
Multitouch.inputMode = MultitouchInputMode.GESTURE;

var mySprite = new Sprite();
mySprite.addEventListener(TransformGestureEvent.GESTURE_SWIPE , onSwipe);
mySprite.graphics.beginFill(0x336699);
mySprite.graphics.drawRect(0, 0, 100, 80);
var myTextField = new TextField();
myTextField.y = 200;
addChild(mySprite);
addChild(myTextField);

function onSwipe(evt:TransformGestureEvent):void {

    if (evt.offsetX == 1 ) {
    myTextField.text = "right";
    }
    if (evt.offsetY == -1) {
    myTextField.text = "up";
    }
    myTextField.text = evt.phase;

}

GESTURE_ZOOM

Constant 
public static const GESTURE_ZOOM:String = "gestureZoom"

Language Version: ActionScript 3.0
Runtime Versions: Flash Player 10.1, AIR 2, Flash Lite 4

Defines the value of the type property of a GESTURE_ZOOM touch event object.

The dispatched TransformGestureEvent object has the following properties:

PropertyValue
altKeytrue if the Alt key is active (Windows or Linux).
bubblestrue
cancelablefalse; there is no default behavior to cancel.
commandKeytrue on the Mac if the Command key is active; false if it is inactive. Always false on Windows.
controlKeytrue if the Ctrl or Control key is active; false if it is inactive.
ctrlKeytrue on Windows or Linux if the Ctrl key is active. true on Mac if either the Ctrl key or the Command key is active. Otherwise, false.
currentTargetThe object that is actively processing the Event object with an event listener.
phaseThe current phase in the event flow; a value from the GesturePhase class.
localXThe horizontal coordinate at which the event occurred relative to the containing display object.
localYThe vertical coordinate at which the event occurred relative to the containing display object.
scaleXThe horizontal scale of the display object since the previous gesture event.
scaleYThe vertical scale of the display object since the previous gesture event.
rotationThe current rotation angle, in degrees, of the display object along the z-axis, since the previous gesture event.
offsetXThe horizontal translation of the display object from its position at the previous gesture event.
offsetYThe vertical translation of the display object from its position at the previous gesture event.
shiftKeytrue if the Shift key is active; false if it is inactive.
targetThe InteractiveObject instance under the touching device. The target is not always the object in the display list that registered the event listener. Use the currentTarget property to access the object in the display list that is currently processing the event.

Related API Elements


Example  ( How to use this example )

The following example shows event handling for the GESTURE_ZOOM events. While the user performs a zoom gesture on the touch-enabled device, myTextField populates with the current phase.
Multitouch.inputMode = MultitouchInputMode.GESTURE;

var mySprite = new Sprite();
mySprite.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom);
mySprite.graphics.beginFill(0x336699);
mySprite.graphics.drawRect(0, 0, 100, 80);
var myTextField = new TextField();
myTextField.y = 200;
addChild(mySprite);
addChild(myTextField);

function onZoom(evt:TransformGestureEvent):void {

    evt.target.scaleX++;

    if (evt.phase==GesturePhase.BEGIN) {
        myTextField.text = "Begin";
    }
    if (evt.phase==GesturePhase.UPDATE) {
        myTextField.text = "Update";
    }
    if (evt.phase==GesturePhase.END) {
        myTextField.text = "End";
    }
}
TransformGestureEventExample.as

The following example shows event handling for the GESTURE_ROTATE events. While the user performs a rotation gesture on the touch-enabled device, mySprite rotates and myTextField populates with the current phase.
Multitouch.inputMode = MultitouchInputMode.GESTURE;

var mySprite = new Sprite();
mySprite.addEventListener(TransformGestureEvent.GESTURE_ROTATE , onRotate );
mySprite.graphics.beginFill(0x336699);
mySprite.graphics.drawRect(0, 0, 100, 80);
var myTextField = new TextField();
myTextField.y = 200;
addChild(mySprite);
addChild(myTextField);

function onRotate(evt:TransformGestureEvent):void {

    evt.target.rotation -= 45;

    if (evt.phase==GesturePhase.BEGIN) {
        myTextField.text = "Begin";
    }
    if (evt.phase==GesturePhase.UPDATE) {
        myTextField.text = "Update";
    }
    if (evt.phase==GesturePhase.END) {
        myTextField.text = "End";
    }
}
TransformGestureExample2.as

The following example shows how to handle transform gesture events. This example assumes an image is on your local system called "african_elephant.jpg" and in the same directory as the TransformGestureExample2 class. This example comes from Christian Cantrell, and is explained in more detail in his quickstart: Multi-touch and gesture support on the Flash Platform.
 package
{
    import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.events.TransformGestureEvent;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.ui.Multitouch;
    import flash.ui.MultitouchInputMode;
    
    [SWF(width=320, height=460, frameRate=24, backgroundColor=0x000000)]
    public class TransformGestureExample2 extends Sprite
    {
        [Embed(source="african_elephant.jpg")]
        public var ElephantImage:Class;
        public var scaleDebug:TextField;
        public var rotateDebug:TextField;

        public function TransformGestureExample2()
        {
            // Debug
            var tf:TextFormat = new TextFormat();
            tf.color = 0xffffff;
            tf.font = "Helvetica";
            tf.size = 11;
            this.scaleDebug = new TextField();
            this.scaleDebug.width = 310;
            this.scaleDebug.defaultTextFormat = tf;
            this.scaleDebug.x = 2;
            this.scaleDebug.y = 2;
            this.stage.addChild(this.scaleDebug);
            this.rotateDebug = new TextField();
            this.rotateDebug.width = 310;
            this.rotateDebug.defaultTextFormat = tf;
            this.rotateDebug.x = 2;
            this.rotateDebug.y = 15;
            this.stage.addChild(this.rotateDebug);

            var elephantBitmap:Bitmap = new ElephantImage();
            var elephant:Sprite = new Sprite();
            
            elephant.addChild(elephantBitmap);
            
            elephant.x = 160;
            elephant.y = 230;
            
            elephantBitmap.x = (300 - (elephantBitmap.bitmapData.width / 2)) * -1;
            elephantBitmap.y = (400 - (elephantBitmap.bitmapData.height / 2)) *-1;
            
            this.addChild(elephant);

            Multitouch.inputMode = MultitouchInputMode.GESTURE;
            elephant.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);
            elephant.addEventListener(TransformGestureEvent.GESTURE_ROTATE, onRotate);
        }
        
        private function onZoom(e:TransformGestureEvent):void
        {
            this.scaleDebug.text = (e.scaleX + ", " + e.scaleY);
            var elephant:Sprite = e.target as Sprite;
            elephant.scaleX *= e.scaleX;
            elephant.scaleY *= e.scaleY;
        }
        
        private function onRotate(e:TransformGestureEvent):void
        {
            var elephant:Sprite = e.target as Sprite;
            this.rotateDebug.text = String(e.rotation);
            elephant.rotation += e.rotation;
        }
    }
}