2

PhoneGap 0.8 を使用していますが、基本的なシェイク ジェスチャを検出したいと考えています。関連する 2 つのスニペットを見つけました。

http://groups.google.com/group/phonegap/browse_thread/thread/25178468b8eb9e9f

http://phonegap.pbworks.com/Handling-Shake-Events

どちらも私のために働いていません。残念ながら、ドキュメントは少し古くなっているようで、PhoneGap の API リファレンスは単なるテスト集です。私はそれができることを知っていますが、既知の適切な出発点がありません。

誰かが PhoneGap の短い振動検出コードのスニペットを提供してくれれば、彼らが彼らのために働くことを知っています. 御時間ありがとうございます!

4

1 に答える 1

3

あなたの最初のリンクは を使用し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);
}
于 2010-01-07T12:58:00.680 に答える