Swipe: یہ کیا ہے، موبائل ڈویلپمنٹ میں سوائپ ہینڈلنگ

مصنف: IT Sectr اشاعت: 2026-02-27 مطالعے کا وقت: 8 منٹ
Swipe (سوائپ) ایک مجرد اشارہ ہے جس میں صارف اسکرین پر ایک انگلی کو ایک سمت میں حرکت دیتا ہے — دائیں، بائیں، اوپر یا نیچے۔ ڈریگ (drag) کے برعکس، سوائپ مسلسل حرکت کو ٹریک نہیں کرتا: یہ ایک مکمل عمل کے طور پر پہچانا جاتا ہے جب انگلی کم از کم حد عبور کر کے اسکرین سے اٹھ جاتی ہے۔ Nielsen Norman Group (2024) کے UX مطالعہ کے مطابق، موبائل ایپلی کیشنز میں ٹیپ کے بعد سوائپ دوسرا سب سے زیادہ بار بار استعمال ہونے والا اشارہ ہے، جو 23% صارف کے تعاملات میں استعمال ہوتا ہے۔

اہم نکات

  • سوائپ ایک مجرد اشارہ ہے: حد عبور کرنے اور انگلی اٹھانے کے بعد ایک مکمل عمل کے طور پر پہچانا جاتا ہے۔
  • iOS میں، سوائپ ہینڈلنگ UISwipeGestureRecognizer کے ذریعے سمت اور انگلیوں کی تعداد کی ترتیب کے ساتھ کی جاتی ہے۔
  • Android میں، آسان API کے لیے GestureDetector with onFling(MotionEvent) یا OnSwipeTouchListener استعمال کیا جاتا ہے۔
  • سوائپ کی حد iOS پر ~20px (viewConfiguration) ہے اور Android میں VelocityTracker کے ذریعے ترتیب دی جاتی ہے۔
  • فہرستوں (UITableView/RecyclerView) کے لیے، دستی پہچان کے بجائے بلٹ ان میکانزم — UISwipeActionsConfiguration اور ItemTouchHelper — استعمال کیے جاتے ہیں۔

سوائپ کیا ہے؟

سوائپ اسکرین کی سطح پر انگلی کی ایک تیز سلائیڈنگ حرکت ہے جو انگلی اٹھانے پر ختم ہوتی ہے۔ سوائپ چھوٹا (کسی عنصر کو پلٹنا) یا لمبا (پردہ کھولنا) ہو سکتا ہے، لیکن اہم خصوصیت مجرد ہونا ہے: نظام اسے مسلسل کوآرڈینیٹ کے سلسلے کے طور پر نہیں بلکہ ایک واحد واقعہ کے طور پر پہچانتا ہے۔

موبائل آپریٹنگ سسٹم تین پیرامیٹرز کی بنیاد پر سوائپ کا پتہ لگاتے ہیں: کم از کم فاصلہ (حد)، کم از کم رفتار (velocity)، اور سمت۔ اگر انگلی آہستہ چلتی ہے یا فاصلہ ناکافی ہے، تو نظام اشارے کو پیننگ یا ٹیپ سے تعبیر کرتا ہے۔ حد کی قدریں پلیٹ فارمز کے درمیان مختلف ہوتی ہیں: iOS ایک مقررہ حد کے ساتھ UISwipeGestureRecognizer میں ایک مستقل استعمال کرتا ہے، Android ViewConfiguration.getScaledTouchSlop() استعمال کرتا ہے جو اسکرین کی کثافت کے لحاظ سے ~8–16 dp واپس کرتا ہے۔

Android Developers Documentation کے مطابق، GestureDetector میں onFling (سوائپ) 100 px/s سے زیادہ رفتار اور 50px سے فاصلے پر چالو ہوتا ہے۔ IT Sectr میں، ہم نیویگیشن (گیلریاں، کارڈ انٹرفیس، آن بورڈنگ) کے لیے سوائپ استعمال کرتے ہیں — یہ اشارہ ہر عمر کے صارفین کے لیے بدیہی ہے۔

سوائپ بمقابلہ پیننگ: فرق کیا ہے؟

سوائپ اور پیننگ (pan/drag) مختلف قسم کے اشارے ہیں، اگرچہ دونوں میں اسکرین پر انگلی حرکت دینا شامل ہے۔ سوائپ مجرد ہے اور اس کا مطلب ہے "ایک عمل انجام دینا،" جبکہ پیننگ مسلسل ہے اور اس کا مطلب ہے "کسی چیز کو حرکت دینا جب تک انگلی اسکرین پر ہے۔"

پیرامیٹر سوائپ (Swipe) پین/ڈریگ (Pan/Drag)
قسم مجرد مسلسل
واقعات ایک (پہچانا گیا/نہیں پہچانا گیا) متعدد (.began → .changed → .ended)
رفتار تیز (تیز حرکت) کوئی بھی (آہستہ حرکت)
iOS مثال UISwipeGestureRecognizer UIPanGestureRecognizer
Android مثال GestureDetector.onFling() GestureDetector.onScroll()
منظر نامہ ای میل حذف کرنا، صفحہ پلٹنا نقشہ حرکت دینا، فائل گھسیٹنا
کوآرڈینیٹ ٹریکنگ نہیں (صرف سمت) ہاں (مسلسل کوآرڈینیٹ اپ ڈیٹ)

سوائپ اور پیننگ کے درمیان انتخاب کام پر منحصر ہے۔ کسی عنصر پر عمل (حذف کرنا، آرکائیو کرنا، مینو کھولنا) کے لیے سوائپ استعمال کریں۔ براہ راست ہیرا پھیری (حرکت دینا، پیمانہ کرنا) کے لیے پیننگ استعمال کریں۔ ایک ہی عنصر پر اشاروں کو ملانے کے لیے require(toFail:) یا حسب ضرورت منطق کی ضرورت ہوتی ہے۔

iOS میں سوائپ: UISwipeGestureRecognizer

UISwipeGestureRecognizer UIGestureRecognizer کا ایک ذیلی طبقہ ہے جو چار سمتوں میں سے ایک میں مجرد سوائپ کو پہچانتا ہے۔ UIPanGestureRecognizer کے برعکس، یہ درمیانی .changed واقعات پیدا نہیں کرتا: پہچانے جانے پر، عمل بالکل ایک بار کال کیا جاتا ہے۔

direction پراپرٹی (UISwipeGestureRecognizer.Direction) ٹریک کی گئی سمت متعین کرتی ہے — .left, .right, .up, .down۔ ماسک کے ذریعے سمتوں کو ملایا جا سکتا ہے: افقی سوائپ کے لیے [.left, .right]۔ numberOfTouchesRequired پراپرٹی انگلیوں کی تعداد متعین کرتی ہے — پہلے سے طے شدہ 1۔ UISwipeGestureRecognizer میں قابل ترتیب فاصلے کی حد نہیں ہے — iOS تقریباً 20px کی بلٹ ان ویلیو استعمال کرتا ہے، جو قابل اعتماد پہچان کے لیے کافی ہے۔

چونکہ UISwipeGestureRecognizer ایک مجرد پہچان کنندہ ہے، یہ UIPanGestureRecognizer سے متصادم نہیں ہوتا: آہستہ حرکت pan کو متحرک کرتی ہے، تیز حرکت swipe کو۔ تاہم، اسی ویو پر UITapGestureRecognizer کے ساتھ موجودگی میں، غلط ٹیپ پہچان کو روکنے کے لیے require(toFail:) کی ضرورت ہو سکتی ہے۔

Android میں سوائپ: GestureDetector

Android میں، سوائپ پہچان کے لیے بنیادی API OnGestureListener کال بیک کے ساتھ GestureDetector ہے، خاص طور پر onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) طریقہ۔ GestureDetector انگلی کی ابتدائی اور آخری پوزیشن، محوروں کے ساتھ حرکت کی رفتار اور فاصلے کا تجزیہ کرتا ہے، اور حدیں عبور ہونے پر onFling کال کرتا ہے۔

کم از کم حدیں ViewConfiguration کے ذریعے ترتیب دی جاتی ہیں: VelocityTracker.getMinVelocity() (~100 px/s) اور ViewConfiguration.getScaledTouchSlop() (~8–16 dp)۔ ایک حسب ضرورت OnSwipeTouchListener ایک عام نمونہ ہے جو API کو آسان بناتا ہے: ڈویلپر کو دستی طور پر سمت اور رفتار کا حساب لگانے کی ضرورت نہیں ہے۔ Android Support Library میں بلٹ ان "SwipeDetector" شامل نہیں ہے، لہذا حسب ضرورت ریپر معیاری حل ہے۔

فہرستوں میں سوائپ کے لیے، Google RecyclerView سے ItemTouchHelper.SimpleCallback استعمال کرنے کی سفارش کرتا ہے، جو اشارے کی نشاندہی، اینیمیشن اور onSwiped() کال بیکس کو خلاصہ کرتا ہے۔ IT Sectr میں، ہم ViewPager2 اور کارڈ انٹرفیس کے لیے حسب ضرورت SwipeListener استعمال کرتے ہیں — یہ کارکردگی کو قربان کیے بغیر سوائپ حساسیت پر کنٹرول دیتا ہے۔

فہرستوں میں سوائپ: SwipeActions اور ItemTouchHelper

فہرستوں (UITableView, RecyclerView) کے لیے، Apple اور Google خصوصی APIs فراہم کرتے ہیں جو دستی طور پر UISwipeGestureRecognizer شامل کرنے کی جگہ لیتے ہیں۔ یہ APIs ایکشن بٹن، حسب ضرورت اینیمیشن اور "حذف کرنے کے لیے سوائپ کریں" اشارے کو سپورٹ کرتے ہیں — موبائل ایپلیکیشنز میں معیاری نمونے۔

iOS (11+) میں، UISwipeActionsConfiguration استعمال کیا جاتا ہے: tableView(_:leadingSwipeActionsConfigurationForRowAt:) طریقہ UIContextualAction کی ایک صف واپس کرتا ہے — عنوان، طرز (destructive, normal) اور ہینڈلر والے بٹن۔ مثال کے طور پر، "حذف کریں" — سرخ پس منظر کے ساتھ .destructive، "آرکائیو کریں" — سرمئی پس منظر کے ساتھ .normal۔ سسٹم بٹنوں کی ظاہری شکل کو متحرک کرتا ہے اور ٹیپ کے بعد completion بلاک کال کرتا ہے۔

Android میں، ItemTouchHelper.SimpleCallback ItemTouchHelper.attachToRecyclerView() کے ذریعے RecyclerView سے منسلک کیا جاتا ہے۔ پیرامیٹرز میں سمت کے جھنڈے (start, end, up, down) اور onSwiped(viewHolder, direction) کال بیک شامل ہیں۔ onSwiped کے اندر، اینیمیشن کے ساتھ آئٹم کو ہٹانے کے لیے adapter.notifyItemRemoved(position) کال کیا جاتا ہے۔ ItemTouchHelper خود بخود اشاروں، اسکرول تنازعات اور آئٹم کی واپسی کو ہینڈل کرتا ہے اگر سوائپ مکمل نہ ہو۔ Google I/O 2024 کے مطابق، فہرستوں میں سوائپ ایکشن والی 70% Android ایپلیکیشنز میں ItemTouchHelper استعمال ہوتا ہے۔

Swift اور Kotlin میں کوڈ کی مثالیں

مثال 1: iOS میں بائیں سوائپ (Swift)

پچھلی اسکرین پر واپس جانے کے لیے ویو میں UISwipeGestureRecognizer شامل کرتا ہے۔ کوڈ .left سمت کے ساتھ کم سے کم پہچان کنندہ ترتیب دکھاتا ہے۔

swift
import UIKit

class CardViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swipeLeft = UISwipeGestureRecognizer(
            target: self,
            action: #selector(handleSwipeLeft(_:))
        )
        swipeLeft.direction = .left
        swipeLeft.numberOfTouchesRequired = 1
        view.addGestureRecognizer(swipeLeft)
    }

    @objc private func handleSwipeLeft(_: UISwipeGestureRecognizer) {
        guard let nav = navigationController else { return }
        if nav.viewControllers.count > 1 {
            nav.popViewController(animated: true)
        } else {
            nav.dismiss(animated: true)
        }
    }
}

پہچان کنندہ کنٹرولر کے روٹ ویو سے منسلک ہوتا ہے۔ navigationController.viewControllers.count چیک اس بات کو یقینی بناتا ہے کہ pop صرف اس وقت انجام دیا جائے جب اسٹیک میں پچھلی اسکرین ہو۔ موڈل کنٹرولرز کے لیے، dismiss استعمال کیا جاتا ہے۔ کوڈ کو حالت چیک کرنے کی ضرورت نہیں ہے — UISwipeGestureRecognizer مجرد ہے اور صرف کامیاب پہچان پر عمل کو کال کرتا ہے۔

مثال 2: Android میں سوائپ (Kotlin) حسب ضرورت OnSwipeTouchListener کے ساتھ

ایک سادہ GestureDetector ریپر لاگو کرتا ہے جو سوائپ کی سمت متعین کرتا ہے اور onSwipeLeft/Right کال بیکس کال کرتا ہے۔

kotlin
import android.content.Context
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View

open class OnSwipeTouchListener(context: Context) : View.OnTouchListener {

    private val gestureDetector = GestureDetector(context, GestureListener())

    override fun onTouch(v: View, event: MotionEvent): Boolean {
        return gestureDetector.onTouchEvent(event)
    }

    private inner class GestureListener : GestureDetector.SimpleOnGestureListener() {

        companion object {
            private const val SWIPE_THRESHOLD = 100
            private const val SWIPE_VELOCITY_THRESHOLD = 100
        }

        override fun onFling(
            e1: MotionEvent?,
            e2: MotionEvent,
            velocityX: Float,
            velocityY: Float
        ): Boolean {
            val diffX = e2.x - e1!!.x
            val diffY = e2.y - e1.y

            if (Math.abs(diffX) > Math.abs(diffY)) {
                if (Math.abs(diffX) > SWIPE_THRESHOLD
                    && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD
                ) {
                    if (diffX > 0) onSwipeRight()
                    else onSwipeLeft()
                    return true
                }
            } else {
                if (Math.abs(diffY) > SWIPE_THRESHOLD
                    && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD
                ) {
                    if (diffY > 0) onSwipeDown()
                    else onSwipeUp()
                    return true
                }
            }
            return false
        }
    }

    open fun onSwipeLeft() {}
    open fun onSwipeRight() {}
    open fun onSwipeUp() {}
    open fun onSwipeDown() {}
}

OnSwipeTouchListener onFling کو لاگو کرتے ہوئے SimpleOnGestureListener کو بڑھاتا ہے۔ diffX/diffY سمت متعین کرتے ہیں، SWIPE_THRESHOLD (100px) اور SWIPE_VELOCITY_THRESHOLD (100 px/s) حدیں ہیں۔ استعمال: view.setOnTouchListener(OnSwipeTouchListener(context).apply { onSwipeLeft = { dismiss() } })۔

مثال 3: iOS میں SwipeActions (UITableView)

ٹیبل سیل پر بائیں سوائپ کرنے پر حذف کرنے کا بٹن شامل کرتا ہے۔ دستی اشارہ پہچان کے بغیر بلٹ ان iOS 11+ API استعمال کرتا ہے۔

swift
func tableView(
    _ tableView: UITableView,
    trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath
) -> UISwipeActionsConfiguration? {
    let deleteAction = UIContextualAction(
        style: .destructive,
        title: "حذف کریں"
    ) { _, _, completionHandler in
        items.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .automatic)
        completionHandler(true)
    }
    deleteAction.backgroundColor = .systemRed

    let config = UISwipeActionsConfiguration(actions: [deleteAction])
    config.performsFirstActionWithFullSwipe = true
    return config
}

طریقہ UIContextualAction کی ایک صف کے ساتھ UISwipeActionsConfiguration واپس کرتا ہے۔ style: .destructive خود بخود سرخ پس منظر متعین کرتا ہے۔ performsFirstActionWithFullSwipe = ہے۔true اضافی ٹیپ کے بغیر مکمل سوائپ کے ساتھ عمل کو انجام دینے کی اجازت دیتا ہے۔ IT Sectr میں، ہم ایکشن والی تمام فہرستوں کے لیے یہ API استعمال کرتے ہیں — یہ معیاری ہے، VoiceOver کو سپورٹ کرتا ہے اور حسب ضرورت GestureRecognizer کی ضرورت نہیں ہے۔

اکثر پوچھے گئے سوالات

سوائپ کو پیننگ سے کیسے الگ کریں؟

سوائپ تیز حرکت اور انگلی اٹھانے کے ساتھ ایک مجرد اشارہ ہے، پیننگ کوآرڈینیٹ ٹریکنگ کے ساتھ مسلسل گھسیٹنا ہے۔ UISwipeGestureRecognizer ایک بار چالو ہوتا ہے، UIPanGestureRecognizer .began → .changed → .ended پیدا کرتا ہے۔ انتخاب منظر نامے پر منحصر ہے: سوائپ اعمال کے لیے (حذف کرنا، پلٹنا)، pan حرکت کے لیے (نقشہ، سلائیڈر)۔

کیا سوائپ iOS اور Android پر یکساں کام کرتا ہے؟

اشارے کی منطق ایک جیسی ہے، لیکن API مختلف ہے۔ iOS direction کے ساتھ UISwipeGestureRecognizer استعمال کرتا ہے۔ Android حسب ضرورت حدود کے ساتھ GestureDetector.onFling() استعمال کرتا ہے۔ نتیجہ مختلف نفاذ کے ساتھ ایک جیسا UX ہے۔ کراس پلیٹ فارم فریم ورک (Flutter, React Native) ایک متحد سوائپ API کے ذریعے فرق کو خلاصہ کرتے ہیں۔

فہرست میں سوائپ کو کیسے ہینڈل کریں؟

iOS (11+) میں، UITableViewDelegate میں UISwipeActionsConfiguration استعمال کریں۔ Android میں، RecyclerView کے لیے ItemTouchHelper.SimpleCallback استعمال کریں۔ یہ APIs دستی GestureRecognizer کی جگہ لیتے ہیں، ایکشن بٹن اور اینیمیشن کو سپورٹ کرتے ہیں، اسکرول تنازعات کو صحیح طریقے سے ہینڈل کرتے ہیں اور پلیٹ فارم HIG کے مطابق ڈھلتے ہیں۔

خلاصہ

  • سوائپ ایک مجرد تیز انگلی سلائیڈنگ اشارہ ہے، ٹیپ کے بعد دوسرا سب سے زیادہ بار بار (23% تعاملات)۔
  • iOS میں، UISwipeGestureRecognizer ~20px کی مقررہ حد کے ساتھ چار سمتوں میں سوائپ ہینڈل کرتا ہے۔
  • Android میں، GestureDetector.onFling() حسب ضرورت رفتار اور فاصلے کی حدود کے ساتھ استعمال کیا جاتا ہے۔
  • فہرستوں کے لیے، دستی پہچان کنندگان کے بجائے UISwipeActionsConfiguration (iOS) اور ItemTouchHelper (Android) استعمال کریں۔
  • سوائپ مجرد ہونے اور تیز رفتار میں پیننگ سے مختلف ہے — ڈیزائن کرتے وقت ان اشاروں کو الجھائیں نہیں۔
  • Android میں حسب ضرورت OnSwipeTouchListener سمت کے حساب کو چھپا کر GestureDetector API کو آسان بناتا ہے۔
  • IT Sectr میں، ہم نیویگیشن، آئٹم حذف کرنے اور آن بورڈنگ کے لیے سوائپ استعمال کرتے ہیں — اشارہ بدیہی ہے اور سیکھنے کی ضرورت نہیں ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں