Вопрос

Я использую PhoneGap 0.8 и хотел бы обнаружить простой жест встряхивания.Я нашел два соответствующих фрагмента:

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

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

Ни один из них у меня не работает.К сожалению, документация кажется немного устаревшей, а справочник по API для PhoneGap представляет собой всего лишь набор тестов.Я знаю, что это можно сделать, но у меня нет хорошей отправной точки.

Если кто-нибудь может предоставить короткий фрагмент кода обнаружения дрожания для PhoneGap, который, как они знают, работает для него, я был бы очень признателен.Спасибо за ваше время!

Это было полезно?

Решение

Ваша первая ссылка использует PhoneGap.Gesture, которого, насколько я вижу, не существует (по крайней мере, для iphone) в версии 0.8.Это совсем недавний пост, так что, возможно, он был добавлен недавно?Я не использовал ревизию более позднюю, чем 0.8.

Я добавил поддержку жестов встряхивания в приложение PhoneGap, «расширив» PhoneGap следующим образом.Но сначала предупреждение:

Apple сочла PhoneGap 0.8 приемлемой для отправки в магазин приложений.Поскольку по сути это расширение (хотя и очень простое) PhoneGap 0.8, может возникнуть риск отклонения.Приложение, для которого я это разработал, еще не прошло процесс утверждения, поэтому я не могу ничего посоветовать по этому поводу.

Также имейте в виду, что это работает только на OS 3.0+ из-за использования нового UIEventSubtypeMotionShake API

Кроме того, это специфично для iPhone.Если вам нужны кроссплатформенные возможности PhoneGap, этот ответ может быть не для вас, если вам не удобно реализовывать встроенную модификацию на других платформах (android и т. д.).В этом случае, возможно, лучше просто дождаться официального релиза PhoneGap, который поддерживает эту функцию на 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top