Long Press ایک طویل دباؤ کا اشارہ ہے جس میں انگلی ایک مخصوص وقت (عام طور پر 0.5–1 سیکنڈ) کے لیے بغیر حرکت کیے اسکرین پر رہتی ہے۔ Tap کے برعکس، Long Press کو چھونے کے لمحے میں نہیں بلکہ تاخیر کے ٹائمر کی میعاد ختم ہونے کے بعد پہچانا جاتا ہے۔ یہ اشارہ سیاق و سباق مینو بلانے، مواد کا پیش منظر دیکھنے، متعدد اشیاء منتخب کرنے اور اضافی اقدامات چالو کرنے کے لیے استعمال ہوتا ہے۔ یہ iOS پر UILongPressGestureRecognizer کے ذریعے، اور Android پر setOnLongClickListener یا GestureDetector کے ذریعے نافذ کیا جاتا ہے۔
اہم نکات
Long Press (طویل دباؤ، طویل چھونا) ایک کثیر چھو انٹرفیس اشارہ ہے جس میں صارف اسکرین کو چھوتا ہے اور انگلی کو ایک مقررہ وقت تک بغیر حرکت کے رکھتا ہے۔ نظام فوری ردعمل نہیں دیتا: یہ ایک ٹائم آؤٹ (عام طور پر 500 ms) کا انتظار کرتا ہے، اور اس کی میعاد ختم ہونے کے بعد ہی اشارے کو Long Press کے طور پر پہچانتا ہے۔ اگر انگلی پہلے اٹھا لی جائے تو اشارہ عام Tap سے تعبیر کیا جاتا ہے۔
یہ اشارہ جدید موبائل انٹرفیس کا بنیادی تعمیری بلاک ہے۔ Apple اسے ایپس (Messages، Safari، Files) میں سیاق و سباق مینو بلانے کے لیے استعمال کرتا ہے۔ Google نے Android میں متن کے انتخاب، ہوم اسکرین پر آئیکنز کی دوبارہ ترتیب اور سیاق و سباق مینو بلانے میں Long Press شامل کیا۔ ویب انٹرفیس میں، طویل دباؤ اکثر موبائل آلات پر ماؤس کے دائیں کلک کی نقل کرتا ہے، جہاں کوئی فزیکل دائیں بٹن نہیں ہوتا۔
تاریخی طور پر، Long Press ٹچ اسکرینز کے لیے سیاق و سباق مینو (دائیں کلک) کے متبادل کے طور پر ابھرا۔ پہلے نفاذ مزاحمتی اسکرینوں والے آلات (Palm، 2000 کی دہائی کے اوائل میں Windows Mobile) پر دیکھے گئے، لیکن اشارہ صرف iPhone اور Android کی آمد کے ساتھ معیاری ہوا۔ دونوں پلیٹ فارمز کے Human Interface Guidelines Long Press کو ایک ثانوی عمل کے طور پر بیان کرتے ہیں — Tap کا متبادل نہیں، بلکہ فعالیت کی توسیع۔
Long Press اور Tap دو مختلف اشارے ہیں جن کے مختلف معنی ہیں۔ Tap ایک فوری چھونا ہے: انگلی اسکرین کو چھوتی ہے اور 100–300 ms میں اٹھ جاتی ہے۔ Tap ہمیشہ ایک بنیادی عمل ہوتا ہے: ایپ کھولنا، بٹن دبانا، لنک کی پیروی کرنا۔ Long Press ایک ثانوی عمل ہوتا ہے: سیاق و سباق مینو کھولنا، ترمیم شروع کرنا، اضافی معلومات دکھانا۔
| پیرامیٹر | Tap | Long Press |
|---|---|---|
| دبائے رکھنے کا وقت | 100–300 ms | 500–1000 ms |
| عمل کی قسم | بنیادی (primary) | ثانوی (secondary) |
| مثالیں | لنک کھولنا، بٹن دبانا | سیاق و سباق مینو، ترمیم |
| فیڈبیک | بصری (نمایاں کرنا) | لمسی (ہیپٹک فیڈبیک) |
| iOS API | UITapGestureRecognizer | UILongPressGestureRecognizer |
| Android API | setOnClickListener | setOnLongClickListener |
بنیادی اصول: Long Press کو کبھی بھی کوئی عمل کرنے کا واحد طریقہ نہ بنائیں۔ صارفین توقع کرتے ہیں کہ Tap بنیادی عمل انجام دے گا، اور Long Press اضافی اختیارات کھولے گا۔ اس اصول کی خلاف ورزی (مثال کے طور پر، لنک کھولنے کے لیے طویل دباؤ کی ضرورت) منفی صارف تجربے اور کم رسائی کا باعث بنتی ہے۔
UILongPressGestureRecognizer طویل دباؤ سنبھالنے کے لیے iOS SDK میں معیاری اشارہ پہچاننے والا ہے۔ یہ UIGestureRecognizer سے وراثت پاتا ہے اور کم از کم مدت، انگلی کی اجازت شدہ حرکت اور چھونے کی تعداد کی ترتیب کو سپورٹ کرتا ہے۔ پہچاننے والا ٹائمر ختم ہونے کے بعد UIGestureRecognizerStateBegan حالت میں جاتا ہے، پھر انگلی ہلنے پر UIGestureRecognizerStateChanged اور چھوڑنے پر UIGestureRecognizerStateEnded میں جاتا ہے۔
// کم از کم مدت کی ترتیب کے ساتھ 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 کے ساتھ بھی مربوط ہوتا ہے — جب UIContextMenuConfiguration کے ذریعے UIView میں سیاق و سباق مینو شامل کیا جاتا ہے، Long Press خود بخود دستی اشارہ نفاذ کے بغیر سیاق و سباق مینو کو بلا لیتا ہے۔
setOnLongClickListener Android SDK میں View کا ایک طریقہ ہے جو طویل دباؤ سننے والا مرتب کرتا ہے۔ جب صارف کسی View کو 500 ms سے زیادہ دبائے رکھتا ہے، نظام onLongClick() کو کال کرتا ہے۔ طریقہ ایک بولین لوٹاتا ہے — true کا مطلب ہے واقعہ سنبھال لیا گیا اور مزید پھیلانا نہیں چاہیے، false کا مطلب ہے واقعہ دوسرے سننے والوں کے ذریعے سنبھالا جا سکتا ہے۔ زیادہ پیچیدہ سنبھالنے (Long Press شروع ہونے کے بعد انگلی کی حرکت) کے لیے، OnGestureListener کے ساتھ GestureDetector استعمال کیا جاتا ہے۔
// لمسی فیڈبیک کے ساتھ 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 Long Press کے بعد View.startDragAndDrop() کے ذریعے اس منظرنامے کو سپورٹ کرتا ہے۔ iOS UIDragInteraction استعمال کرتا ہے، جہاں گھسیٹنے کے تعامل کو گھسیٹنا شروع کرنے کے لیے طویل دباؤ کی ضرورت ہوتی ہے۔
دونوں پلیٹ فارمز کے Human Interface Guidelines واضح سفارشات دیتے ہیں: Long Press ہمیشہ ایک ثانوی عمل ہونا چاہیے۔ کبھی بھی طویل دباؤ کو کوئی اہم کام انجام دینے کا واحد طریقہ نہ بنائیں۔ صارفین پہلے Tap آزماتے ہیں — اگر Tap توقع کے مطابق کام نہیں کرتا، تو وہ مایوس ہوتے ہیں۔ بصری اشارے شامل کریں: سیاق و سباق مینو کو تین نقطوں والے آئیکن سے ظاہر کیا جا سکتا ہے، اور Long Press کو سپورٹ کرنے والے عناصر کو چھونے پر بصری اشارے سے ظاہر کیا جا سکتا ہے۔
لمسی فیڈبیک Long Press کے لیے لازمی ہے۔ جب اشارہ پہچان لیا جاتا ہے، آلے کو لمس کے جواب سے اس کی تصدیق کرنی چاہیے: iOS میں یہ ہلکے جھٹکے کے ساتھ UIImpactFeedbackGenerator ہے، Android میں — HapticFeedbackConstants.LONG_PRESS۔ لمس فیڈبیک کے بغیر، صارف کو یقین نہیں ہوتا کہ اشارہ رجسٹر ہوا اور وہ دوبارہ دبا سکتا ہے، جس سے ناپسندیدہ اعمال پیدا ہو سکتے ہیں۔
| سفارش | iOS | Android |
|---|---|---|
| پہچان کا ٹائم آؤٹ | 0.5–0.65 سیکنڈ | 500 ms (ڈیفالٹ) |
| لمسی فیڈبیک | UIImpactFeedbackGenerator | HapticFeedbackConstants.LONG_PRESS |
| بصری فیڈبیک | سیاق و سباق مینو، نمایاں کرنا | PopupMenu، ripple حرکت پذیری |
| رسائی | VoiceOver + Custom Actions | TalkBack + AccessibilityNodeInfo |
| انگلی کی زیادہ سے زیادہ حرکت | allowableMovement = 10 pt | TouchSlop (~8 dp ڈیفالٹ) |
| اسکرول کے ساتھ تنازعہ | cancelsTouchesInView = delayed | onInterceptTouchEvent + LongPress |
رسائی: تمام صارفین طویل دباؤ نہیں کر سکتے (حرکت کی معذوری والے افراد، بزرگ صارفین)۔ ہمیشہ Long Press کے اعمال تک رسائی کا متبادل طریقہ فراہم کریں — مثال کے طور پر، انٹرفیس میں "مزید" بٹن کے ذریعے یا نظام کی رسائی کی خصوصیات (iOS میں VoiceOver، Android میں TalkBack) کے ذریعے۔ iOS کے لیے، آپ UIAccessibilityCustomAction کے ذریعے حسب ضرورت اعمال شامل کر سکتے ہیں، جو VoiceOver روٹر کے ذریعے دستیاب ہیں۔
اکثر پوچھے گئے سوالات
Long Press کے لیے معیاری وقت دونوں پلیٹ فارمز پر 0.5 سیکنڈ (500 ms) ہے۔ iOS minimumPressDuration کو 0.3 سے 1.0 سیکنڈ تک ترتیب دینے کی اجازت دیتا ہے۔ Android View.setOnLongClickListener کے لیے 500 ms کا مقررہ ٹائم آؤٹ استعمال کرتا ہے۔ محدود حرکی صلاحیتوں والے صارفین کے لیے، ٹائم آؤٹ کو 0.8–1.0 سیکنڈ تک بڑھانے کی سفارش کی جاتی ہے۔
Long Press دبائے رکھنے کے وقت (0.5 s) سے پہچانا جاتا ہے، 3D Touch — دباؤ کی قوت (گرام میں) سے پہچانا جاتا ہے۔ 3D Touch صرف iPhone 6S–XR پر دستیاب ہے (ہارڈویئر Force Touch ٹیکنالوجی)۔ iOS 13 سے شروع کرتے ہوئے، Apple نے 3D Touch کو Haptic Touch سے بدل دیا — ایک سافٹ ویئر سمولیشن جو لمس فیڈبیک کے ساتھ Long Press کے ذریعے کام کرتا ہے۔ Haptic Touch تمام جدید iPhone اور iPad پر دستیاب ہے۔
Long Press اور اسکرول کے درمیان تنازعہ ایک عام مسئلہ ہے۔ حل: iOS میں اشارہ پہچاننے والے کے لیے delaysTouchesBegan = true مقرر کریں (نظام فوری طور پر touchesBegan نہیں بھیجتا، بلکہ اشارہ پہچاننے کا انتظار کرتا ہے)۔ Android میں، Long Press کے لیے false لوٹانے والا onInterceptTouchEvent استعمال کریں۔ اگر صارف ٹائم آؤٹ سے پہلے انگلی ہلانا شروع کر دیتا ہے، تو اشارہ اسکرول کے حق میں منسوخ کر دیا جاتا ہے۔
ہاں، Long Press ویب ایپلیکیشنز میں سپورٹ کیا جاتا ہے وقت کی پیمائش کے ساتھ touchstart/touchend ایونٹ کے ذریعے۔ جدید براؤزرز contextmenu ایونٹ کو بھی سپورٹ کرتے ہیں، جو موبائل آلات پر طویل دباؤ پر متحرک ہوتا ہے۔ کراس براؤزر مطابقت کے لیے، hammer.js جیسی لائبریریاں استعمال کریں یا touchstart ہینڈلر میں setInterval کے ذریعے حسب ضرورت پہچاننے والا نافذ کریں۔
iOS میں، لمسی فیڈبیک UIImpactFeedbackGenerator کے ذریعے شامل کیا جاتا ہے۔ UILongPressGestureRecognizer کے began حالت میں منتقل ہونے کے لمحے impactOccurred() کو کال کریں۔ ہلکے جواب کے لیے، UIImpactFeedbackGenerator(style: .light) استعمال کریں۔ زیادہ نمایاں جواب کے لیے — .medium۔ سیاق و سباق مینوز کے لیے، iOS اضافی کوڈ کے بغیر UIContextMenuInteraction کے ذریعے خود بخود لمس فیڈبیک شامل کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں