你的第一个链接是使用PhoneGap.Gesture
,据我所知在0.8中不存在(至少对iphone而言)。尽管最近可能增加了这个帖子,但这是相当近期的一篇文章。我没有使用任何以后的修订版本0.8以上
我已经通过'扩展'phonegap如下所示为phonegap应用程序添加了摇动手势支持。但首先警告:
苹果已将PhoneGap 0.8视为可接受提交给应用程序商店。由于这基本上是PhoneGap 0.8的一个扩展(尽管非常简单),可能会有被拒绝的风险。我为此开发的应用程序尚未完成审批流程,因此我无法就此进行任何进一步的建议。
另外要注意,这仅适用于OS 3.0+由于使用新的API UIEventSubtypeMotionShake
。此外,这是iPhone具体。如果你想要PhoneGap的跨平台功能,这个答案可能不适合你,除非你很自信地在其他平台上实现原生端修改(android等)。在这种情况下,只需等待iphone上支持这个功能的官方phonegap版本可能会更好。
下面的代码添加到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);
}
感谢您的回答。这为PhoneGap扩展提供了一些很好的见解,并回答了原始问题。 – GloryFish 2010-01-12 01:07:54
该应用程序最终是否通过了Apple的验收程序? – Ash 2012-03-13 15:00:27
@Ash,这个项目被抛弃了,所以我从来没有找到答案。然而,由于巧合,我目前正在研究PhoneGap集成的另一个项目,PhoneGap的更新版本有一个更加可扩展的插件框架(PGPlugin),您可以使用它来代替此答案。请参阅http://wiki.phonegap.com/w/page/36753496/How%20to%20Create%20a%20PhoneGap%20Plugin%20for%20iOS – cidered 2012-03-14 13:56:12