Come posso rilevare un gesto scossa in PhoneGap 0.8?
-
18-09-2019 - |
Domanda
Sto utilizzando PhoneGap 0.8 e mi piacerebbe rilevare un gesto semplice scossa. Ho trovato due frammenti rilevanti:
http://groups.google.com/group/phonegap/browse_thread / thread / 25178468b8eb9e9f
http://phonegap.pbworks.com/Handling-Shake-Events
Nessuno di loro stanno lavorando per me. Purtroppo la documentazione sembra un po 'datata e il riferimento API per PhoneGap è solo un mucchio di test. So che può essere fatto solo che non ho un noto buon punto di partenza.
Se chiunque può fornire un breve frammento di codice di rilevamento di scossa per PhoneGap che sanno funziona per loro sarei molto grato. Grazie per il tuo tempo!
Soluzione
Il primo collegamento sta usando PhoneGap.Gesture
, che, per quanto posso vedere non esiste (almeno per iPhone) a 0,8. E 'piuttosto un recente post anche se così potrebbe essere stato aggiunto di recente? Non ho usato alcuna revisione successiva di 0,8
Ho aggiunto il supporto scossa gesto per un'applicazione PhoneGap da 'estensione' PhoneGap come segue. Ma prima un avvertimento:
Apple ha ritenuto PhoneGap 0.8 accettabile per la presentazione di app store. Poiché questo è essenzialmente un'estensione (anche se molto semplice) per PhoneGap 0.8 ci può essere un rischio di rigetto. L'applicazione che ha sviluppato questo per non è ancora passata attraverso il processo di approvazione, quindi non posso consigliare ulteriormente su questo.
Anche essere consapevoli del fatto che questo funziona solo su OS 3.0+ causa di un uso della nuova API UIEventSubtypeMotionShake
Inoltre si tratta di iPhone specifica. Se si desidera che le funzionalità della piattaforma trasversali di PhoneGap, questa risposta non può essere per voi se non hai dimestichezza attuare la modifica lato nativo sulle altre piattaforme (Android, ecc). In questo caso può essere meglio aspettare solo per un rilascio PhoneGap ufficiale che sostiene questo su iPhone.
Aggiungere il seguente codice a PhoneGapViewController.m
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (UIEventSubtypeMotionShake == motion)
{
[webView stringByEvaluatingJavaScriptFromString:@"navigator.myext.onShakeGesture();"];
}
}
Quindi aggiungere questo come un modulo myext.js
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();
});
}
Ora includono myext.js nella vostra sezione contenuti <head>
HTML subito dopo il link al phonegap.js
<script type="text/javascript" charset="utf-8" src="myext.js"/>
e utilizzare dallo script (ad esempio provoca un avviso, ma fare ciò che devi fare):
function watchShake() {
var cb = function(){
navigator.notification.alert("Shake it!");
};
navigator.myext.addShakeGestureListener(cb);
}