Ваша первая ссылка использует PhoneGap.Gesture
, которого, насколько я вижу, не существует (по крайней мере, для iphone) в 0.8. Это довольно недавний пост, хотя, возможно, он был добавлен недавно? Я не использовал более позднюю ревизию, чем 0.8
Я добавил поддержку жестов встряхивания к приложению телефонной щели, «расширив» телефонную щель следующим образом. Но сначала предупреждение:
Apple считает PhoneGap 0.8 приемлемым для отправки в магазин приложений. Поскольку это, по сути, расширение (хотя и очень простое) для PhoneGap 0.8, может быть риск отклонения. Приложение, для которого я разработал это приложение, еще не прошло процесс утверждения, поэтому я не могу давать дальнейшие рекомендации по этому вопросу.
Также имейте в виду, что это работает только на OS 3.0+ из-за использования нового UIEventSubtypeMotionShake
API
Кроме того, это зависит от iPhone. Если вам нужны кроссплатформенные возможности PhoneGap, этот ответ может быть не для вас, если вы не знакомы с реализацией модификации нативной стороны на других платформах (Android и т. Д.). В этом случае, возможно, лучше подождать официального релиза телефонного промежутка, который поддерживает это на iphone.
Добавьте следующий код в PhoneGapViewController.m
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (UIEventSubtypeMotionShake == motion)
{
[webView stringByEvaluatingJavaScriptFromString:@"navigator.myext.onShakeGesture();"];
}
}
Затем добавьте это как модуль javascript 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();
});
}
Теперь включите myext.js в ваш HTML-раздел <head>
сразу после ссылки на phonegap.js
<script type="text/javascript" charset="utf-8" src="myext.js"/>
и использование из скрипта (пример вызывает предупреждение, но делает то, что вам нужно):
function watchShake() {
var cb = function(){
navigator.notification.alert("Shake it!");
};
navigator.myext.addShakeGestureListener(cb);
}