Question

J'utilise PhoneGap 0.8 et je voudrais détecter un geste de secousse de base. J'ai trouvé deux extraits pertinents:

http://groups.google.com/group/phonegap/browse_thread / fil / 25178468b8eb9e9f

http://phonegap.pbworks.com/Handling-Shake-Events

Aucun d'entre eux travaillent pour moi. Malheureusement, la documentation semble un peu dépassée et la référence API pour PhoneGap est juste un tas de tests. Je sais que cela peut être fait je n'ai pas bon point de départ connu.

Si quelqu'un peut fournir un court extrait de code de détection de tremblement pour PhoneGap qu'ils connaissent des œuvres pour eux, je serais bien obligé. Merci pour votre temps!

Était-ce utile?

La solution

Votre premier lien utilise PhoneGap.Gesture, qui, autant que je peux voir n'existe pas (au moins pour l'iphone) dans 0,8. Il est tout à fait un post récent que cela pourrait avoir été ajouté récemment? Je ne l'ai pas utilisé toute révision ultérieure de 0,8

Je l'ai ajouté le support de geste secouer pour une application PhoneGap par « extension » PhoneGap comme suit. Mais d'abord, un avertissement:

Apple ont jugé PhoneGap 0,8 acceptable pour la soumission à l'App Store. Comme cela est essentiellement une extension (quoique très simple) à 0,8 PhoneGap il peut y avoir un risque de rejet. L'application que je développe cela pour n'a pas encore passé par le processus d'approbation, donc je ne peux pas conseiller plus loin sur ce point.

Il faut aussi savoir que cela ne fonctionne que sur OS 3.0+ en raison de l'utilisation de la nouvelle API UIEventSubtypeMotionShake

De plus, c'est spécifique iPhone. Si vous voulez que les capacités de la plate-forme de croix PhoneGap, cette réponse ne peut pas être pour vous à moins que vous êtes à l'aise la mise en œuvre de la modification du côté natif sur les autres plates-formes (android etc). Dans ce cas, il peut être préférable de simplement attendre un communiqué de PhoneGap officiel qui prend en charge ce sur l'iPhone.

Ajoutez le code suivant à PhoneGapViewController.m

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (UIEventSubtypeMotionShake == motion)
    {
        [webView stringByEvaluatingJavaScriptFromString:@"navigator.myext.onShakeGesture();"];
    }
}

Ensuite, ajoutez cela comme un myext.js module javascript

/* We need PhoneGap.js to be loaded to work properly before we can initialise so wait for it here */
(function() 
{
    var timer = setInterval(function() 
    {
        if (typeof(PhoneGap == 'object'))
        {
            clearInterval(timer);
            myExtInit();
        }
    }, 1);
})();

function MyExt()
{
    // initialization
    this.callbacks = {
        onShakeGesture: []
    };
}

/* Called by ObjectiveC side when a shake gesture is detected */
MyExt.prototype.onShakeGesture = function()
{
    for (var i = 0; i < this.callbacks.onShakeGesture.length; i++) 
    {
        var f = this.callbacks.onShakeGesture[i];
        f();
    }
};

MyExt.prototype.addShakeGestureListener = function(shakeCallback)
{
    if (typeof(shakeCallback) == 'function')
    {
        this.callbacks.onShakeGesture.push(shakeCallback)
    }
};

function myExtInit()
{
    // Init phonegap extension specific objects using PhoneGap.addConstructor
    PhoneGap.addConstructor(function() {
        if (typeof navigator.myext == "undefined") navigator.myext = new MyExt();
    });
}

comprennent myext.js dans votre contenu HTML section <head> juste après le lien vers phonegap.js

<script type="text/javascript" charset="utf-8" src="myext.js"/>

et utiliser à partir du script (par exemple provoque une alerte, mais faire ce que vous devez faire):

function watchShake() {
  var cb = function(){
    navigator.notification.alert("Shake it!");
  };
    navigator.myext.addShakeGestureListener(cb);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top