Gesture olayını işleme

Flash Player 10.1 ve üstü, Adobe AIR 2 ve üstü

Hareket olaylarını da basit dokunma olayları gibi işleyin. TransformGestureEvent sınıfı, GestureEvent sınıfı ve PressAndTapGestureEvent sınıfı içerisinde olay türü sabitleriyle belirlenmiş bir dizi hareket olayını dinleyebilirsiniz.

Bir hareket dokunma olayını işlemek için:
  1. flash.ui.Multitouch.inputMode özelliğini MultitouchInputMode.GESTURE olarak belirleyip, uygulamanızı hareket girdilerini işlemeye ayarlayın.

  2. Sprite veya TextField gibi özelliklerini InteractiveObject sınıfından alan bir sınıf örneğine olay dinleyicisi ekleyin.

  3. İşlenecek hareket olayının türünü belirtin.

  4. Olaya yanıt olarak bir şey yapması için bir olay işleyici işlevi çağırın.

Örneğin, dokunmatik bir ekranda mySprite üzerindeki kareye dokunulduğunda aşağıdaki kod bir mesaj görüntüler:

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

İki parmaklı dokunma olayları da aynı şekilde işlenirken, GestureEvent sınıfını kullanır:

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

Bastır-tıklat olayları da aynı şekilde işlenirken, PressAndTapGestureEvent sınıfını kullanır:

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); 
}
Not: Tüm GestureEvent, TransformGestureEvent ve PressAndTapGestureEvent olay türleri bütün çalışma zamanı ortamlarında desteklenmez. Örneğin, tüm dokunmatik aygıtlar çok parmaklı dokunuşu algılayamaz. Dolayısıyla, bu aygıtlar üzerinde InteractiveObject gestureSwipe olayları desteklenmez. Uygulamanızın çalıştığından emin olmak için belli olayların desteğini sınamayı deneyin ve daha fazla bilgi edinmek için Sorun Giderme bölümüne bakın.

Gesture Olayı özellikleri

Hareket olaylarının kapsamı, basit dokunmatik olaylarınkinden küçüktür. Bunlara da aynı şekilde, olay işleyici işlevindeki olay nesnesinden erişebilirsiniz.

Örneğin, kullanıcı bir döndürme hareketi gerçekleştirdikçe aşağıdaki kod mySprite öğesini döndürür. Metin alanı, son hareketten bu yana dönüş miktarını gösterir (bu kodu test ederken, değerlerin değişimini görmek için defalarca döndürün):

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(); 
}
Not: Tüm TransformGestureEvent özellikleri tüm çalışma zamanı ortamlarında desteklenmez. Örneğin, tüm dokunmatik aygıtlar ekran üzerindeki bir hareketin dönüşünü algılayamaz. Dolayısıyla, TransformGestureEvent.rotation özelliği bu aygıtlarda desteklenmez. Uygulamanızın çalıştığından emin olmak için belli özelliklerin desteğini sınamayı deneyin ve daha fazla bilgi edinmek için Sorun Giderme bölümüne bakın.

Gesture aşamaları

Bunun yanında, hareket olayları aşamalardan takip edilebilir, böylece hareket meydana gelirken özellikleri takip edebilirsiniz. Örneğin, bir nesne dokunma hareketiyle taşındığında x koordinatlarını takip edebilirsiniz. Dokunma tamamlandıktan sonra, yol üzerindeki tüm noktalardan bir çizgi oluşturmak için bu değerleri kullanın. Ya da bir görüntüleme nesnesi ekran boyunca kaydırma hareketiyle sürüklendiğinde, onu görsel olarak değiştirin. Kaydırma hareketi tamamlandığında nesneyi yeniden değiştirin.
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; 
} 
}
Not: Güncelleme aşamasının sıklığı, çalışma zamanının ortamına bağlıdır. Bazı işletim sistemi ve donanım kombinasyonları, güncellemelere hiç dayanmaz.

Hareket aşaması basit hareket olayları için “tümü” şeklindedir

Bazı hareket olay nesneleri, hareket olayının aşamalarını tek tek izlemek yerine, olay nesnesinin aşama özelliğini hepsi değeriyle doldurur. Basit hareketler ve iki parmakla dokunma, olayı birden fazla aşamayla izlemez. gestureSwipe veya gestureTwoFingerTap olaylarının dinlenmesi için bir InteractiveObject olay nesnesinin phase özelliği, olay gönderildiğinde daima hepsi’dir:

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