我正在使用PhoneGap 0.8,我想检测一个基本的摇晃手势。我找到了两个相关的片段:
http://groups.google.com/group/phonegap/browse_thread/thread/25178468b8eb9e9f
http://phonegap.pbworks.com/Handling-Shake-Events
他们都没有为我工作。不幸的是,文档似乎有点过时,而PhoneGap的API参考只是一堆测试。我知道可以做到我只是没有一个已知的良好起点。
如果有人能为PhoneGap提供一小段震动检测代码,他们知道这些代码对他们有用,我将非常感激。谢谢你的时间!
答案 0 :(得分:3)
您的第一个链接正在使用PhoneGap.Gesture
,据我所知,在0.8中不存在(至少对于iphone)。这是最近的一篇文章虽然最近可能已经添加了吗?我没有使用任何后来的修订版而不是0.8
我通过“扩展”手机屏幕为手机应用添加了摇动手势支持,如下所示。但首先要警告:
Apple认为PhoneGap 0.8可以接受提交到应用商店。由于这实际上是PhoneGap 0.8的扩展(尽管非常简单),因此可能存在拒绝风险。我开发的应用程序尚未通过审批流程,因此我无法就此进一步提供建议。
另请注意,由于使用了新的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();
});
}
现在,在链接到<head>
phonegap.js
部分中加入myext.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);
}