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:
-
flash.ui.Multitouch.inputMode
özelliğini
MultitouchInputMode.GESTURE
olarak belirleyip, uygulamanızı hareket girdilerini işlemeye ayarlayın.
-
Sprite veya TextField gibi özelliklerini InteractiveObject sınıfından alan bir sınıf örneğine olay dinleyicisi ekleyin.
-
İşlenecek hareket olayının türünü belirtin.
-
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"
}
|
|
|
|
|