Long Press — ما هو، إيماءة الضغط الطويل في التطبيقات

المؤلف: IT Sectr نُشر: 2026-02-27 وقت القراءة: 8 دق

Long Press هي إيماءة ضغط مطول حيث يبقى الإصبع على الشاشة لفترة زمنية محددة (عادة 0.5–1 ثانية) دون تحريك. على عكس Tap، يتم التعرف على Long Press ليس في لحظة اللمس، بل بعد انتهاء مؤقت التأخير. تُستخدم الإيماءة لاستدعاء قائمة سياقية، معاينة المحتوى، تحديد عدة كائنات، وتفعيل إجراءات إضافية. يتم تنفيذها في iOS عبر UILongPressGestureRecognizer، وفي Android عبر setOnLongClickListener أو GestureDetector.

النقاط الرئيسية

  • التأخير — الفرق الرئيسي بين Long Press وTap: يتطلب الإمساك لمدة 0.5–1 ثانية
  • القائمة السياقية — الاستخدام الأكثر شيوعاً لـ Long Press: استدعاء خيارات إضافية لعنصر ما
  • UILongPressGestureRecognizer — الفئة الرئيسية في iOS لمعالجة الضغط المطول مع استدعاءات الحالة
  • setOnLongClickListener — طريقة View في Android التي تستدعي مستمعاً عند الضغط المطول
  • حالات متعددة — يمر Long Press بحالات began، changed، ended، cancelled في iOS

ما هو Long Press؟

Long Press (الضغط المطول، اللمس الطويل) هي إيماءة واجهة متعددة اللمس حيث يلمس المستخدم الشاشة ويبقي الإصبع ثابتاً لمدة زمنية محددة. لا يتفاعل النظام فوراً: ينتظر مهلة (عادة 500 مللي ثانية)، وفقط بعد انتهائها يتعرف على الإيماءة كـ Long Press. إذا تم رفع الإصبع مبكراً، تُفسر الإيماءة كضغطة Tap عادية.

هذه الإيماءة هي لبنة بناء أساسية لواجهات الأجهزة المحمولة الحديثة. تستخدمها Apple لاستدعاء القوائم السياقية في التطبيقات (Messages، Safari، Files). أدمجت Google Long Press في تحديد النص، إعادة ترتيب الأيقونات على الشاشة الرئيسية، واستدعاء القوائم السياقية في Android. في واجهات الويب، يحاكي الضغط المطول غالباً النقر بزر الماوس الأيمن على الأجهزة المحمولة حيث لا يوجد زر أيمن فعلي.

تاريخياً، ظهر Long Press كبديل للقائمة السياقية (النقر الأيمن) للشاشات اللمسية. ظهرت التطبيقات الأولى على أجهزة ذات شاشات مقاومة (Palm، Windows Mobile في أوائل الألفينيات)، لكن الإيماءة توحدت فقط مع ظهور iPhone وAndroid. تصف إرشادات واجهة المستخدم البشرية لكلا المنصتين Long Press كإجراء ثانوي — ليس بديلاً عن Tap، بل توسيعاً للوظائف.

كيف يختلف Long Press عن Tap

Long Press وTap إيماءتان مختلفتان بدلالات مختلفة. Tap هي ضغطة فورية: يلمس الإصبع الشاشة ويرفع خلال 100–300 مللي ثانية. Tap دائماً إجراء رئيسي: فتح تطبيق، الضغط على زر، اتباع رابط. Long Press هو إجراء ثانوي: فتح قائمة سياقية، بدء التحرير، عرض معلومات إضافية.

المعاملTapLong Press
مدة الإمساك100–300 مللي ثانية500–1000 مللي ثانية
نوع الإجراءرئيسي (primary)ثانوي (secondary)
أمثلةفتح رابط، الضغط على زرقائمة سياقية، تحرير
التغذية الراجعةبصرية (تسليط الضوء)لمسية (تغذية راجعة لمسية)
API iOSUITapGestureRecognizerUILongPressGestureRecognizer
API AndroidsetOnClickListenersetOnLongClickListener

قاعدة أساسية: لا تستخدم Long Press أبداً كالطريقة الوحيدة لتنفيذ إجراء. يتوقع المستخدمون أن Tap ينفذ الإجراء الرئيسي، وأن Long Press يفتح خيارات إضافية. انتهاك هذا المبدأ (مثل اشتراط ضغط مطول لفتح رابط) يؤدي إلى تجربة مستخدم سلبية وتقليل إمكانية الوصول.

Long Press في iOS: UILongPressGestureRecognizer

UILongPressGestureRecognizer هو المعرف القياسي للإيماءات في iOS SDK لمعالجة الضغط المطول. يرث من UIGestureRecognizer ويدعم تكوين المدة الدنيا، الحركة المسموح بها للإصبع، وعدد اللمسات. ينتقل المعرف إلى الحالة UIGestureRecognizerStateBegan بعد انتهاء المؤقت، ثم إلى UIGestureRecognizerStateChanged عند تحريك الإصبع، وUIGestureRecognizerStateEnded عند الرفع.

swift
// UILongPressGestureRecognizer مع تكوين المدة الدنيا
class ContextMenuViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let longPressRecognizer = UILongPressGestureRecognizer(
            target: self,
            action: #selector(handleLongPress(_:))
        )

        // الحد الأدنى لمدة الإمساك: 0.5 ثانية
        longPressRecognizer.minimumPressDuration = 0.5

        // الحركة المسموح بها للإصبع: 10 نقاط
        longPressRecognizer.allowableMovement = 10

        customView.addGestureRecognizer(longPressRecognizer)
    }

    @objc func handleLongPress(_ recognizer: UILongPressGestureRecognizer) {
        guard recognizer.state == .began else { return }

        // إنشاء قائمة سياقية
        let location = recognizer.location(in: self.view)
        ContextMenuPresenter.show(at: location)
    }
}

معلمات التكوين: minimumPressDuration — الوقت بالثواني قبل التفعيل (افتراضياً 0.5، للوصولية يُوصى بـ 0.65+)؛ allowableMovement — أقصى حركة للإصبع بالنقاط (افتراضياً 10، زيادتها تساعد مع الأيدي غير المستقرة). يدعم iOS numberOfTouchesRequired للإيماءات متعددة اللمس (مثل الضغط المطول بإصبعين). يتكامل المعرف أيضاً مع UIContextMenuInteraction — عند إضافة قائمة سياقية إلى UIView عبر UIContextMenuConfiguration، يستدعي Long Press القائمة السياقية تلقائياً دون تنفيذ يدوي للإيماءة.

Long Press في Android: setOnLongClickListener

setOnLongClickListener هي طريقة View في Android SDK تقوم بتعيين مستمع للضغط المطول. عندما يمسك المستخدم بـ View لأكثر من 500 مللي ثانية، يستدعي النظام onLongClick(). ترجع الطريقة قيمة منطقية — true تعني أن الحدث تمت معالجته ولا يجب أن ينتقل أكثر، false تعني أن الحدث يمكن معالجته بواسطة مستمعين آخرين. للمعالجة الأكثر تعقيداً (حركة الإصبع بعد بدء Long Press)، يُستخدم GestureDetector مع OnGestureListener.

kotlin
// مثال setOnLongClickListener مع تغذية راجعة لمسية
val itemView: View = findViewById(R.id.itemView)

itemView.setOnLongClickListener {
    // استجابة لمسية لتأكيد بدء الإيماءة
    it.performHapticFeedback(
        HapticFeedbackConstants.LONG_PRESS
    )

    // عرض القائمة السياقية في موضع العنصر
    val popup = PopupMenu(this, it)
    popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
    popup.show()

    true // تمت معالجة الحدث
}

GestureDetector يوفر تحكماً أدق في الإيماءة. على عكس setOnLongClickListener، يخطر GestureDetector عن البداية (onLongPress)، الحركة (onScroll)، والرفع. يتيح ذلك سيناريوهات معقدة — مثلاً، بدء السحب بعد الضغط المطول (Drag-and-Drop). يتطلب OnGestureListener تنفيذ ستة طرق: onDown، onShowPress، onSingleTapUp، onScroll، onLongPress، onFling.

أين يُستخدم الضغط المطول

Long Press يُستخدم في عشرات السيناريوهات لواجهات الأجهزة المحمولة. التطبيق الأكثر شيوعاً هو القائمة السياقية: الضغط المطول على جهة اتصال يظهر خيارات الاتصال (اتصال، رسالة، بريد)، على ملف — خيارات (نسخ، نقل، حذف)، على نص — التحديد والحافظة. يستخدم مشغل Android الضغط المطول على أيقونة لتحريك التطبيقات وإضافة الأدوات.

تحديد النص هو مثال كلاسيكي لـ Long Press على كلا المنصتين. في iOS، الضغط المطول على نص ينشط عدسة مكبرة لتحديد موضع المؤشر؛ على كلمة — يحددها مع علامات. في Android، الضغط المطول يحدد الكلمة بأكملها ويظهر شريط إجراءات (نسخ، قص، لصق). تستخدم كلتا المنصتين سحب العلامات اللاحق لتوسيع التحديد.

المعاينة — في iOS، الضغط المطول على رابط في Safari أو رسالة في Mail يفتح معاينة للمحتوى (peek). في Android، يتم تنفيذ سلوك مماثل عبر Long Press على إشعار (يوسع الإشعار مع أزرار الإجراءات). تستخدم تطبيقات الصور الضغط المطول على الصورة المصغرة لمعاينة سريعة للصورة.

السحب والإفلات (Drag-and-Drop) غالباً ما يبدأ بـ Long Press. يمسك المستخدم بالعنصر، يتحول النظام إلى وضع السحب، وحركة الإصبع تنقل العنصر عبر الشاشة. يدعم Android هذا السيناريو عبر View.startDragAndDrop() بعد Long Press. يستخدم iOS UIDragInteraction، حيث يتطلب تفاعل السحب ضغطاً مطولاً لبدء السحب.

توصيات استخدام Long Press

إرشادات واجهة المستخدم البشرية لكلا المنصتين تقدم توصيات واضحة: يجب أن يكون Long Press دائماً إجراءً ثانوياً. لا تجعل الضغط المطول أبداً الطريقة الوحيدة لتنفيذ وظيفة حرجة. المستخدمون يجربون Tap أولاً — إذا لم يعمل Tap كما هو متوقع، يشعرون بالإحباط. أضف إشارات بصرية: يمكن الإشارة إلى القوائم السياقية بأيقونة ثلاث نقاط، والعناصر التي تدعم Long Press بتلميح بصري عند اللمس.

التغذية الراجعة اللمسية إلزامية لـ Long Press. عندما يتم التعرف على الإيماءة، يجب على الجهاز تأكيد ذلك باستجابة لمسية: في iOS هذا UIImpactFeedbackGenerator بنبضة خفيفة، في Android — HapticFeedbackConstants.LONG_PRESS. بدون تغذية راجعة لمسية، لا يكون المستخدم متأكداً من تسجيل الإيماءة وقد يضغط مرة أخرى مسبباً إجراءات غير مرغوب فيها.

التوصيةiOSAndroid
مهلة التعرف0.5–0.65 ثانية500 مللي ثانية (افتراضي)
التغذية الراجعة اللمسيةUIImpactFeedbackGeneratorHapticFeedbackConstants.LONG_PRESS
التغذية الراجعة البصريةقائمة سياقية، تسليط الضوءPopupMenu، رسم متحرك ripple
إمكانية الوصولVoiceOver + Custom ActionsTalkBack + AccessibilityNodeInfo
أقصى حركة للإصبعallowableMovement = 10 نقطةTouchSlop (~8 dp افتراضياً)
تعارض مع التمريرcancelsTouchesInView = delayedonInterceptTouchEvent + LongPress

إمكانية الوصول: ليس كل المستخدمين قادرين على تنفيذ ضغط مطول (أشخاص ذوو إعاقات حركية، مستخدمون كبار السن). وفر دائماً طريقة بديلة للوصول إلى إجراءات Long Press — مثلاً، عبر زر "المزيد" في الواجهة أو عبر ميزات إمكانية الوصول في النظام (VoiceOver في iOS، TalkBack في Android). في iOS، يمكنك إضافة Custom Actions عبر UIAccessibilityCustomAction، المتاحة من خلال عجلة VoiceOver.

الأسئلة الشائعة

ما هي المدة القياسية للإمساك لـ Long Press؟

المدة القياسية لـ Long Press هي 0.5 ثانية (500 مللي ثانية) على كلا المنصتين. يسمح iOS بتكوين minimumPressDuration من 0.3 إلى 1.0 ثانية. يستخدم Android مهلة ثابتة مقدارها 500 مللي ثانية لـ View.setOnLongClickListener. للمستخدمين ذوي المهارات الحركية المحدودة، يُوصى بزيادة المهلة إلى 0.8–1.0 ثانية.

ما الفرق بين Long Press و3D Touch؟

Long Press يُتعرف عليه بمدة الإمساك (0.5 ثانية)، 3D Touch — بقوة الضغط (جرامات القوة). 3D Touch متاح فقط على iPhone 6S–XR (تقنية Force Touch المادية). بدءاً من iOS 13، استبدلت Apple 3D Touch بـ Haptic Touch — محاكاة برمجية تعمل عبر Long Press مع تغذية راجعة لمسية. Haptic Touch متاح على جميع أجهزة iPhone وiPad الحديثة.

كيف نتجنب تعارض Long Press مع التمرير (ScrollView)؟

تعارض Long Press والتمرير مشكلة شائعة. الحل: عيّن delaysTouchesBegan = true لمعرف الإيماءة في iOS (النظام لا يرسل touchesBegan فوراً، بل ينتظر التعرف على الإيماءة). في Android، استخدم onInterceptTouchEvent الذي يرجع false لـ Long Press. إذا بدأ المستخدم تحريك الإصبع قبل المهلة، تُلغى الإيماءة لصالح التمرير.

هل يمكن استخدام Long Press في تطبيقات الويب (PWA)؟

نعم، Long Press مدعوم في تطبيقات الويب عبر حدث touchstart/touchend مع قياس الوقت. المتصفحات الحديثة تدعم أيضاً حدث contextmenu الذي يُطلق عند الضغط المطول على الأجهزة المحمولة. للتوافق عبر المتصفحات، استخدم مكتبات مثل hammer.js أو نفذ معرفاً مخصصاً عبر setInterval في معالج touchstart.

كيف أضيف تغذية راجعة لمسية عند Long Press في iOS؟

في iOS، تُضاف التغذية الراجعة اللمسية عبر UIImpactFeedbackGenerator. استدعِ impactOccurred() في لحظة انتقال UILongPressGestureRecognizer إلى الحالة began. لاستجابة خفيفة، استخدم UIImpactFeedbackGenerator(style: .light). لاستجابة أكثر وضوحاً — .medium. للقوائم السياقية، يضيف iOS تلقائياً تغذية راجعة لمسية عبر UIContextMenuInteraction بدون كود إضافي.

الخلاصة

  • Long Press — إيماءة إمساك الإصبع على الشاشة لمدة 0.5–1 ثانية لاستدعاء إجراءات ثانوية
  • الفرق عن Tap — Tap فوري (إجراء رئيسي)، Long Press يتطلب مهلة (إجراء ثانوي)
  • API iOS — UILongPressGestureRecognizer مع معلمات minimumPressDuration وallowableMovement
  • API Android — View.setOnLongClickListener وGestureDetector.OnGestureListener
  • الاستخدامات — قوائم سياقية، تحديد نص، معاينة، بدء السحب والإفلات
  • التغذية الراجعة اللمسية — إلزامية لتأكيد التعرف على الإيماءة للمستخدم
  • إمكانية الوصول — وفر دائماً وصولاً بديلاً لإجراءات Long Press

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا