Pergunta

Eu estou usando PhoneGap 0,8 e eu gostaria de detectar um gesto básico shake. Eu encontrei dois trechos relevantes:

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

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

Nenhum deles está trabalhando para mim. Infelizmente a documentação parece um pouco ultrapassada e a referência da API para o PhoneGap é apenas um monte de testes. Eu sei que pode ser feito Eu simplesmente não têm uma boa conhecido ponto de partida.

Se alguém pode fornecer um curto trecho de código de detecção de trepidação para PhoneGap que eles sabem obras para eles, eu ficaria muito grato. Obrigado pelo seu tempo!

Foi útil?

Solução

Seu primeiro link está usando PhoneGap.Gesture, que, tanto quanto eu posso ver não existe (pelo menos para iphone) em 0,8. É bem um post recente embora assim que pode ter sido adicionado recentemente? Eu não usei qualquer revisão mais tarde do que 0,8

Eu adicionei o apoio gesto de agitar para um aplicativo PhoneGap por 'prolongar' phonegap como segue. Mas, primeiro, um aviso:

Apple têm considerado PhoneGap 0,8 como aceitáveis ??para apresentação à loja de aplicativos. Uma vez que esta é essencialmente uma extensão (embora muito simples) para PhoneGap 0,8 pode haver um risco de rejeição. O aplicativo que eu desenvolvi isso por ainda não passou pelo processo de aprovação, então eu não posso aconselhar qualquer outra sobre este assunto.

Também estar ciente de que isso só funciona no OS 3.0+ devido ao uso da nova API UIEventSubtypeMotionShake

Além disso, este é o iPhone específico. Se você quer as capacidades multi-plataforma de PhoneGap, esta resposta pode não ser para você a menos que você está confortável implementar a modificação lado nativo em outras plataformas (Android etc). Neste caso, pode ser melhor apenas esperar por um lançamento oficial phonegap que suporta esta no iPhone.

Adicione o seguinte código para PhoneGapViewController.m

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

Em seguida, adicione isso como uma javascript módulo myext.js

/* 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();
    });
}

Agora incluem myext.js em sua seção de conteúdo <head> HTML logo após o link para phonegap.js

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

e utilização de roteiro (exemplo provoca um alerta, mas fazer o que você precisa fazer):

function watchShake() {
  var cb = function(){
    navigator.notification.alert("Shake it!");
  };
    navigator.myext.addShakeGestureListener(cb);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top