あなたの最初のリンクは を使用しPhoneGap.Gesture
ていますが、これは私が見る限り (少なくとも iPhone の場合) 0.8 には存在しません。これはかなり最近の投稿なので、最近追加された可能性がありますか? 0.8 以降のリビジョンは使用していません
次のように phonegap を「拡張」することで、phonegap アプリにシェイク ジェスチャのサポートを追加しました。しかし、最初の警告:
Apple は、PhoneGap 0.8 を App Store への提出に適していると判断しました。これは基本的に (非常に単純ですが) PhoneGap 0.8 の拡張であるため、拒否される可能性があります。私がこれを開発したアプリはまだ承認プロセスを経ていないため、これについてこれ以上アドバイスすることはできません.
UIEventSubtypeMotionShake
また、新しいAPIを使用しているため、これは OS 3.0+ でのみ機能することに注意してください。
さらに、これは 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();
});
}
<head>
へのリンクの直後に、HTML コンテンツ セクションに myext.js を含めます。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);
}