2013-05-02 4 views
3

J'ai utilisé l'article this (et quelques autres) pour essayer d'implémenter une reconnaissance gestuelle dans mon application, et cela fonctionne. Cependant, ce que je veux faire est de détecter plusieurs gestes; par exemple, un balayage et un contact. Ce que je ne semble pas pouvoir faire est d'établir si l'événement MouseUp est causé par la fin d'un geste, ou par un simple contact.WinJS gestureRecognizer - comment piéger plusieurs gestes

function processUpEvent(e) { 
    lastElement = e.currentTarget; 
    gestureRecognizer.processUpEvent(e.currentPoint); 

    processTouchEvent(e.currentPoint); 
} 

Ce qui se passe actuellement est-il traité à la fois. Comment puis-je détecter si l'utilisateur a «lâché» l'écran pour un glissement ou un contact?

EDIT:

var recognizer = new Windows.UI.Input.GestureRecognizer();   

    recognizer.gestureSettings = Windows.UI.Input.GestureSettings.manipulationTranslateX 
    recognizer.addEventListener('manipulationcompleted', function (e) { 
     var dx = e.cumulative.translation.x 
     //Do something with direction here 
    }); 

    var processUp = function (args) { 
     try { 
      recognizer.processUpEvent(args.currentPoint); 
     } 
     catch (e) { } 
    } 

    canvas.addEventListener('MSPointerDown', function (args) { 
     try { 
      recognizer.processDownEvent(args.currentPoint); 
     } 
     catch (e) { } 
    }, false); 

    canvas.addEventListener('MSPointerMove', function (args) { 
     try { 
      recognizer.processMoveEvents(args.intermediatePoints); 
     } 
     catch (e) { } 
    }, false); 
    canvas.addEventListener('MSPointerUp', processUp, false); 
    canvas.addEventListener('MSPointerCancel', processUp, false); 

donc je dois gérer à la fois processUp et manipulationcompleted, mais l'un ou l'autre.

Répondre

1

Je l'ai trouvé un moyen de le faire, mais ce n'est pas assez:

var eventFlag = 0; 

var processUp = function (args) { 
    try { 
     recognizer.processUpEvent(args.currentPoint); 

     if (eventFlag == 0) { 
      // do stuff 
     } else { 
      eventFlag = 0; 
     } 
    } 
    catch (e) { } 
} 

recognizer.gestureSettings = Windows.UI.Input.GestureSettings.manipulationTranslateX 
recognizer.addEventListener('manipulationcompleted', function (e) { 
    var dx = e.cumulative.translation.x 
    //Do something with direction here 
    eventFlag = 1; 
}); 
1

Vous pouvez jeter un oeil à ma démo "input" dans le codeSHOW. Il suffit d'installer l'application codeSHOW (http://aka.ms/codeshowapp) et de regarder la démo Pointer Input et "voir le code" ou tout simplement aller à la source code on CodePlex. Espérons que cela aide.

+0

Je ne suis pas sûr que cela répond à ma question. Bien que cela couvre le glisser, j'ai besoin de capturer la direction. J'ai mis à jour ma question avec quelques détails plus spécifiques. –

Questions connexes