سؤال

أنا أستخدم phonegap 0.8 وأرغب في اكتشاف لفتة اهتزاز أساسية. لقد وجدت اثنين من القصاصات ذات الصلة:

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

http://phonegap.pbwors.com/handling-shake-events.

لا أحد منهم يعملون بالنسبة لي. لسوء الحظ، يبدو أن الوثائق قديمة قديمة ومرجع API لنظام PhoneGAP هو مجرد مجموعة من الاختبارات. أعلم أنه يمكن القيام به، ليس لدي نقطة انطلاق جيدة معروفة.

إذا كان بإمكان أي شخص تقديم مقتطف قصير لرمز الكشف عن الهزات لنظام PhoneGap الذي يعرفونه من أجلهم سأكون ملزمين كثيرا. شكرا على وقتك!

هل كانت مفيدة؟

المحلول

رابطك الأول يستخدم PhoneGap.Gesture, ، والتي بقدر ما أستطيع أن أرى غير موجودة (على الأقل لفون) في 0.8. إنه منصب مؤخرا تماما رغم أنه قد تمت إضافته مؤخرا؟ لم أستخدم أي مراجعة لاحقة من 0.8

لقد أضفت دعم الإيماءات يهز إلى تطبيق PhoneGap عن طريق "تمديد" PhoneGap كما يلي. ولكن أولا تحذير:

اعتبرت Apple phonegap 0.8 مقبولة لتقديمها إلى متجر التطبيقات. لأن هذا هو في الأساس امتدادا (وإن كان بسيطة للغاية) إلى phonegap 0.8 قد يكون هناك خطر الرفض. لم يزور التطبيق الذي قمت بتطويره بهذا من خلال عملية الموافقة، لذلك لا يمكنني تقديم المشورة بشأن هذا الأمر.

كن على علم أيضا بأن هذا يعمل فقط على نظام التشغيل 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();"];
    }
}

ثم أضف هذا كوحدة جافا سكريبت 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