ٹیپ ٹچ انٹرفیس کا بنیادی جیسچر ہے: اسکرین پر انگلی سے ایک بار چھونا اور پھر چھوڑ دینا۔ ٹیپ موبائل آپریٹنگ سسٹمز میں بنیادی عمل ہے — ایپلی کیشنز کھولنا، بٹن دبانا، فہرست کے آئٹمز منتخب کرنا۔ یہ 100–300 ملی سیکنڈ میں پہچانا جاتا ہے اور کلک ایونٹ پیدا کرتا ہے۔ iOS میں یہ UITapGestureRecognizer کے ذریعے ہینڈل کیا جاتا ہے، Android میں — setOnClickListener یا View.onClick کے ذریعے۔
اہم نکات
ٹیپ (چھونا، دبانا) انگلی یا قلم سے ٹچ اسکرین کو جلدی سے چھونے کا جیسچر ہے۔ یہ جیسچر دو مراحل پر مشتمل ہے: نیچے چھونا اور چھوڑنا، جو بغیر حرکت کے ایک ہی جگہ پر ہوتے ہیں۔ سسٹم ٹیپ کو تب پہچانتا ہے جب نیچے اور اوپر کے درمیان وقت کا فرق ایک حدی قدر (عام طور پر 300–500 ملی سیکنڈ) سے تجاوز نہ کرے۔ اگر صارف انگلی زیادہ دیر تک رکھے تو جیسچر لمبا دباؤ بن جاتا ہے۔
ٹیپ موبائل UX کی بنیاد ہے. تمام موبائل پلیٹ فارمز پر، ٹیپ ڈیسک ٹاپ انٹرفیس میں استعمال ہونے والے ماؤس کے بائیں کلک کی جگہ لیتا ہے۔ ماؤس کلک کے برعکس، ٹیپ میں کوئی موڈیفائر (Shift+کلک، Ctrl+کلک) اور ہوور نہیں ہے — یہ حد موبائل انٹرفیس ڈیزائن کو شکل دیتی ہے۔ پیش نظارہ کی کمی کو پورا کرنے کے لیے، موبائل پلیٹ فارمز بصری فیڈ بیک استعمال کرتے ہیں: چھونے پر نمایاں کرنا، Android میں ریپل اثر، iOS میں شفافیت میں تبدیلی۔
ٹیپ کی اناٹومی سسٹم کی سطح پر پانچ مراحل شامل کرتی ہے: سینسر بیداری (چھونا)، کوآرڈینیٹ کا تعین، شور فلٹرنگ (انگلی ایک حدی فاصلے سے زیادہ نہیں ہلنی چاہیے)، تکمیل کا انتظار (چھوڑنا یا رکھنا)، درجہ بندی (ٹیپ، لمبا دباؤ، گھسیٹنا)۔ جدید ٹچ کنٹرولرز 60–120 ہرٹز کی پولنگ ریٹ پر اس سائیکل کو 8–16 ملی سیکنڈ میں پروسیس کرتے ہیں۔
ٹیپ اور کلک مختلف طبیعیات کے ساتھ مختلف واقعات ہیں۔ کلک ایک ماؤس واقعہ ہے جو ماؤس کے بٹن کو ایک ہی مقام پر دبانے اور چھوڑنے پر ہوتا ہے۔ ٹیپ ایک ٹچ اسکرین واقعہ ہے جو انگلی کے چھونے پر ہوتا ہے۔ موبائل آلات پر، براؤزر ٹیپ کو 300–350 ملی سیکنڈ کی تاخیر سے کلک ایونٹ میں تبدیل کرتا ہے (ڈبل ٹیپ زوم کی نقل کرنے کے لیے)۔ یہ تاخیر تاریخی طور پر موبائل ویب کے لیے ایک مسئلہ تھی جب تک Apple اور Google نے user-scalable=no کے ساتھ meta viewport متعارف نہیں کرایا۔
| پیرامیٹر | ٹیپ (ٹچ) | کلک (ماؤس) |
|---|---|---|
| انپٹ ڈیوائس | انگلی، قلم | ماؤس کرسر |
| مراحل | touchstart → touchend | mousedown → mouseup |
| پیش نظارہ (ہوور) | دستیاب نہیں | دستیاب (ہوور) |
| تاخیر | 0–500 ملی سیکنڈ | 0 ملی سیکنڈ |
| درستگی | کم (انگلی کرسر سے چوڑی) | اعلیٰ (پکسل سطح) |
| موڈیفائر | کوئی نہیں | Shift, Ctrl, Cmd |
| متعدد | ملٹی ٹچ (2+ انگلیاں) | نہیں (ایک کرسر) |
ٹچ ایونٹس ماؤس ایونٹس سے علیحدہ API ہے۔ ٹچ ایونٹس (touchstart, touchmove, touchend) ٹچ پوائنٹس (TouchList)، کوآرڈینیٹ، دباؤ اور ٹچ ایریا کے سائز (radiusX, radiusY) کی ایک صف منتقل کرتے ہیں۔ ماؤس ایونٹس صرف کرسر کوآرڈینیٹ منتقل کرتے ہیں۔ جدید براؤزر touchend سے کلک ترکیب کرتے ہیں اگر انگلی کی کوئی حرکت نہ ہو اور کوئی touchcancel ایونٹ نہ ہو۔ Pointer Events API دونوں طریقوں کو یکجا کرتا ہے، تمام انپٹ ڈیوائسز کے لیے یکساں ہینڈلنگ فراہم کرتا ہے۔
UITapGestureRecognizer iOS SDK میں سنگل اور متعدد ٹیپ کے لیے معیاری پہچان کنندہ ہے۔ numberOfTapsRequired (متواتر ٹیپ کی تعداد) اور numberOfTouchesRequired (ایک ساتھ چھونے والی انگلیوں کی تعداد) کی تشکیل کی حمایت کرتا ہے۔ پہچان کنندہ UIGestureRecognizerStateRecognized حالت میں منتقل ہوتا ہے جب صارف انگلی چھوڑتا ہے اور ٹچ حرکت کی حد سے تجاوز نہیں کرتا۔
// ڈبل ٹیپ سپورٹ کے ساتھ UITapGestureRecognizer
class InteractiveImageViewController: UIViewController {
private var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// سنگل ٹیپ — کنٹرول دکھائیں/چھپائیں
let singleTap = UITapGestureRecognizer(
target: self,
action: #selector(handleSingleTap)
)
imageView.addGestureRecognizer(singleTap)
// ڈبل ٹیپ — تصویر زوم کریں
let doubleTap = UITapGestureRecognizer(
target: self,
action: #selector(handleDoubleTap)
)
doubleTap.numberOfTapsRequired = 2
// سنگل ٹیپ صرف اس وقت متحرک ہوتا ہے جب ڈبل ٹیپ پہچانا نہ جائے
singleTap.require(doubleTap.toFail())
imageView.addGestureRecognizer(doubleTap)
}
@objc private func handleSingleTap() { /* کنٹرولز دکھائیں */ }
@objc private func handleDoubleTap() { /* زوم کریں */ }
}اہم نمونہ: ایک ساتھ سنگل اور ڈبل ٹیپ کی حمایت کرتے وقت require(_:toFail:) کو کال کرنا ضروری ہے۔ اس کے بغیر، سنگل ٹیپ فوراً متحرک ہو جائے گا، سسٹم کو دوسرے دباؤ کا انتظار کرنے کی اجازت نہیں دے گا۔ iOS UIControl.addTarget کے ذریعے ٹیپ پہچان کی بھی حمایت کرتا ہے — UIButton، UISwitch اور دیگر کنٹرولز کے لیے۔ UIKit کے بلٹ ان کنٹرولز میں پہلے سے ہی معیاری ٹیپ ہینڈلنگ ہے، اور ان کے اوپر UITapGestureRecognizer شامل کرنا تنازعات کا سبب بن سکتا ہے۔
View.setOnClickListener View پر کلک ہینڈل کرنے کے لیے Android SDK کا معیاری طریقہ ہے۔ جب صارف کسی View کو چھوتا ہے اور اسی عنصر پر انگلی چھوڑتا ہے (View کے اندر touch down → touch up)، تو onClick() طریقہ کال کیا جاتا ہے۔ Android خود بخود ٹچ اینیمیشن کے ساتھ ریپل اثر (API 21+ پر) شامل کرتا ہے۔ ایک بٹن PRESSED حالت میں دبایا ہوا سمجھا جاتا ہے، جو بصری طور پر سلیکٹر یا RippleDrawable کے ذریعے ظاہر ہوتا ہے۔
// Data Binding کے ساتھ Fragment میں setOnClickListener
class ItemListFragment : Fragment() {
private var binding: FragmentItemListBinding? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding = FragmentItemListBinding.bind(view)
binding.submitButton.setOnClickListener {
submitForm()
}
// ڈبل کلک روکنے کے لیے ڈیباؤنس سننے والا
binding.submitButton.setOnClickListener(
DebouncingClickListener {
submitForm()
}
)
}
private fun submitForm() {
// فارم ڈیٹا جمع کروانا
}
}ڈیباؤنس Android ڈیولپمنٹ میں ایک اہم نمونہ ہے۔ صارف غلطی سے مختصر وقت میں دو بار بٹن دبا سکتا ہے، جس کے نتیجے میں فارم کی دوہری جمع آوری یا عمل کی دوہری انجام دہی ہو سکتی ہے۔ حل: ایک DebouncingClickListener ریپر جو 500–1000 ملی سیکنڈ کے لیے بار بار کلک کو روکتا ہے۔ Google سرکاری Android Architecture Components مثالوں میں اس طریقہ کار کی سفارش کرتا ہے۔ RecyclerView کے لیے، کال بیک انٹرفیس کے ساتھ ListAdapter کے ذریعے setOnItemClickListener فراہم کیا جاتا ہے۔
ڈبل ٹیپ — 300–400 ملی سیکنڈ سے زیادہ کے وقفے کے ساتھ لگاتار دو ٹیپ۔ تصاویر زوم کرنے (نقشے، تصاویر)، سوشل نیٹ ورکس پر لائک کرنے (Instagram, Twitter)، فہرست کے شروع میں واپس جانے (فون، پیغامات) کے لیے استعمال ہوتا ہے۔ ٹرپل ٹیپ کم عام ہے — بنیادی طور پر رسائی کے افعال (فل اسکرین موڈ، VoiceOver) اور گیمز میں استعمال ہوتا ہے۔
ڈبل ٹیپ کا نفاذ سنگل ٹیپ کے ساتھ ہم آہنگی کی ضرورت ہے: اگر آپ ایک عنصر میں دونوں جیسچر شامل کرتے ہیں، تو سنگل ٹیپ تاخیر سے متحرک ہوگا (سسٹم دوسرے دباؤ کا انتظار کرتا ہے)۔ iOS میں، یہ تاخیر require(toFail:) کے ذریعے منظم کی جاتی ہے — سنگل ٹیپ اس وقت تک مؤخر رہتا ہے جب تک یہ یقینی نہ ہو جائے کہ ڈبل ٹیپ نہیں ہوگا۔ Android میں، onSingleTapConfirmed اور onDoubleTap کال بیک کے ساتھ GestureDetector.OnDoubleTapListener استعمال کیا جاتا ہے۔ onSingleTapConfirmed صرف ٹائم آؤٹ کے بعد کال کیا جاتا ہے جب سسٹم کو یقین ہو جاتا ہے کہ یہ ایک واحد ٹیپ ہے۔
// GestureDetector کے ذریعے Android میں ڈبل ٹیپ
class PhotoViewerActivity : AppCompatActivity() {
private var gestureDetector: GestureDetector? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
gestureDetector = GestureDetector(this, object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
toggleControls() // کنٹرول دکھائیں/چھپائیں
return true
}
override fun onDoubleTap(e: MotionEvent): Boolean {
zoomToPoint(e.x, e.y) // ٹچ پوائنٹ پر زوم
return true
}
})
}
}Instagram جیسا ڈبل ٹیپ سوشل ایپس کے لیے ایک مقبول UX نمونہ ہے۔ تصویر پر ڈبل ٹیپ لائک اینیمیشن (دل کا آئیکن) متحرک کرتا ہے۔ یہ Android میں GestureDetector یا iOS میں numberOfTapsRequired=2 کے ساتھ UITapGestureRecognizer کے ذریعے لاگو کیا جاتا ہے۔ اینیمیشن کے لیے، iOS پر Core Animation اور Android پر ObjectAnimator/AnimatorSet استعمال ہوتا ہے۔ ڈبل ٹیپ کے ردعمل کا وقت کم سے کم ہونا چاہیے — صارف دوسرے ٹیپ کے بعد فوری اینیمیشن کی توقع رکھتا ہے۔
Apple کے Human Interface Guidelines اور Google کے Material Design کے ٹیپ کے لیے مخصوص تقاضے ہیں۔ کم از کم ٹچ ہدف کا سائز: iOS کے لیے 44×44 pt اور Android کے لیے 48×48 dp۔ یہ اسکرین پر ~9 ملی میٹر کے برابر ہے — ایک اوسط بالغ کی انگلی کے سرے کا سائز۔ ٹچ ہدف کے درمیان فاصلہ غلط ٹیپ کو روکنے کے لیے کم از کم 8 pt/dp ہونا چاہیے۔
| قاعدہ | قدر | وجہ |
|---|---|---|
| کم از کم ہدف کا سائز | 44×44 pt (iOS) / 48×48 dp (Android) | اوسط انگلی کے سرے کا سائز ~9 ملی میٹر |
| ہدف کے درمیان فاصلہ | ≥8 pt / ≥8 dp | غلط ٹیپ کی روک تھام |
| بصری فیڈ بیک | نمایاں / ریپل | ٹچ رجسٹریشن کی تصدیق |
| ٹیپ اینیمیشن کی مدت | 100–200 ملی سیکنڈ | ادراک کے لیے کافی، انٹرفیس کو سست نہیں کرتا |
| ڈبل ٹیپ ہینڈلنگ | سنگل ٹیپ تاخیر درکار ہے | غلط متحرک ہونے کی روک تھام |
| اسکرین کے کنارے کے علاقے | بڑھا ہوا ہٹ ایریا | ڈیوائس کی گرفت کا معاوضہ |
بصری فیڈ بیک ٹیپ کے لیے لازمی ہے۔ صارف کو دیکھنا چاہیے کہ ٹچ رجسٹر ہو گیا ہے: رنگ کی تبدیلی، شفافیت، ریپل اینیمیشن یا نمایاں کرنا۔ فیڈ بیک کے بغیر، صارف دوبارہ ٹیپ کر سکتا ہے، جس سے ناپسندیدہ اعمال پیدا ہو سکتے ہیں۔ iOS میں، معیاری ٹچ نمایاں اینیمیشن 0.15 سیکنڈ کی مدت کے ساتھ شفافیت کو 0.3 میں تبدیل کرنا ہے۔ Android میں — ٹچ پوائنٹ سے پھیلنے والا Material ریپل اثر۔ بصری فیڈ بیک میں تاخیر نہ کریں — صارف کو ٹچ کے ساتھ ہی رد عمل دیکھنا چاہیے۔
اکثر پوچھے گئے سوالات
ٹیپ ایک ٹچ ایونٹ ہے، کلک ایک ماؤس ایونٹ ہے۔ براؤزر میں، ٹیپ 300 ملی سیکنڈ کی تاخیر سے کلک میں تبدیل ہوتا ہے (ڈبل ٹیپ زوم سے فرق کرنے کے لیے)۔ جدید براؤزر (Chrome 32+, Safari 9.1+) meta viewport width=device-width کے ساتھ اس تاخیر کو غیر فعال کر دیتے ہیں۔ یکساں ہینڈلنگ کے لیے Pointer Events API استعمال کریں: pointerdown/pointerup تمام انپٹ ڈیوائسز (ماؤس، ٹچ، قلم) کے لیے کام کرتے ہیں۔
کم از کم ٹچ ہدف 44×44 پوائنٹس (iOS) یا 48×48 dp (Android) ہے۔ یہ جسمانی اسکرین پر تقریباً 9×9 ملی میٹر کے برابر ہے۔ اگر بٹن بصری طور پر چھوٹا ہے (مثلاً، 24×24 آئیکن)، تو UIEdgeInsets (iOS) یا TouchDelegate (Android) کے ذریعے ہٹ ایریا بڑھائیں۔ ملحقہ ہدف کے درمیان فاصلہ غلط ٹیپ سے بچنے کے لیے کم از کم 8 یونٹ ہونا چاہیے۔
ڈبل کلک کی روک تھام ڈیباؤنس میکانزم کے ذریعے لاگو کی جاتی ہے: پہلے کلک کے بعد، بٹن 500–1000 ملی سیکنڈ کے لیے بلاک ہو جاتا ہے۔ Android میں، DebouncingClickListener (Architecture Components سے تیار حل) استعمال کریں۔ iOS میں، دبانے کے فوراً بعد بٹن کی isEnabled غیر فعال کریں اور DispatchQueue.main.asyncAfter کے ذریعے دوبارہ فعال کریں۔ ویب ایپلیکیشنز میں، پہلے کلک کے بعد button عنصر پر disabled جھنڈا سیٹ کریں۔
لمبا ٹیپ (لمبا دباؤ) بغیر حرکت کے 500+ ملی سیکنڈ تک اسکرین پر انگلی رکھنا ہے۔ ٹیپ ایک تیز چھونا (100–300 ملی سیکنڈ) ہے۔ ٹیپ مرکزی عمل انجام دیتا ہے، لمبا ٹیپ ایک ثانوی عمل (سیاق و سباق کا مینو، ترمیم) انجام دیتا ہے۔ iOS میں، ٹیپ UITapGestureRecognizer کے ذریعے، لمبا دباؤ UILongPressGestureRecognizer کے ذریعے ہینڈل کیا جاتا ہے۔ Android میں — setOnClickListener بمقابلہ setOnLongClickListener۔
ہاں، قلم کو ٹیپ کے طور پر ہینڈل کیا جاتا ہے معیاری ٹچ API کے ذریعے۔ Apple Pencil قوت (دباؤ)، altitudeAngle اور azimuth منتقل کرتا ہے۔ Android میں S Pen MotionEvent.getPressure() اور getAxisValue(MotionEvent.AXIS_TILT) کے ذریعے اسی طرح کے پیرامیٹرز منتقل کرتا ہے۔ قلم کے لیے، آپ ٹچ ہدف کو 24×24 پوائنٹس تک کم کر سکتے ہیں کیونکہ قلم کی درستگی انگلی سے زیادہ ہوتی ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں