Gesture Navigation — qanday tuzilgan, turlari va amalga oshirilishi

Muallif: IT Sectr Nashr etilgan: 2026-06-10 O'qish vaqti: 10 daq

Gesture Navigation — bu zamonaviy smartfonlarning ko'pchiligida apparat tugmalarini almashtirgan, mobil ilovani sensor jestlar orqali boshqarish tizimidir. Android Developers (2024) ma'lumotlariga ko'ra, jest navigatsiyasi Android 10 dan boshlab standartga aylandi va Apple 2017 yilda iPhone X bilan jestlarga o'tdi. Tizimga swipe, pinch, double tap va long press kiradi — har bir jest ekran kontekstida ma'lum bir maqsadga ega. Tushunish jest navigatsiyasi arxitekturasini intuitiv va javob beruvchi interfeyslar yaratish uchun zarurdir.

Asosiy fikrlar

  • Gesture Navigation — tugmalar o'rniga sensor jestlar orqali ilovani boshqarish
  • Uch turdagi jestlar: navigatsion, manipulyatsion va kontekstual
  • Android 10+ va iOS 7+ jestlarni tizimli navigatsiya usuli sifatida ishlatadi
  • GestureDetector — Android View da jestlarni qayta ishlashning asosiy klassi
  • UIGestureRecognizer — iOS UIKit dagi barcha jestlar uchun abstrakt klass

Gesture Navigation nima

Gesture Navigation — foydalanuvchining mobil qurilma bilan sensor ekran tomonidan tanib olinadigan teginish, harakat va bosish ketma-ketliklari orqali o'zaro ta'sir qilish usulidir. An'anaviy tugmalardan farqli o'laroq, jestlar ekranda qattiq joylashuvga ega emas va ular harakat namunasiga ko'ra tanib olinadi: chekkadan surish, ikki barmoq bilan chimdik, uzoq bosish.

Jest navigatsiyasiga o'tish iPhone X bilan boshlandi (2017), Apple Home tugmasini butunlay olib tashlab, uni pastki chekkadan surish bilan almashtirdi. Google Android 10 da (2020) trendga ergashdi va foydalanuvchilarga tanlov taklif qildi: uch tugmali navigatsiya, ikki tugmali navigatsiya va to'liq jest navigatsiyasi. StatCounter (2025) ma'lumotlariga ko'ra, Android qurilmalarining 75% dan ortig'i va iOS qurilmalarining 95% i jest navigatsiyasidan foydalanadi.

Arxitektura nuqtai nazaridan jestni tanib olish uch bosqichdan iborat: Capture (sensor hodisalarini olish), Recognition (harakat namunasini aniqlash) va Action (belgilangan harakatni bajarish). Tizim darajasida Android va iOS asosiy navigatsion jestlar uchun o'rnatilgan ishlov beruvchilarga ega — orqaga surish, bosh ekranga o'tish, ilovalar almashtirgichini ochish. Dasturchi faqat o'z jestlarini ushbu tizimga to'g'ri integratsiya qilishi kerak.

Mobil navigatsiyadagi jest turlari

Barcha sensor jestlar maqsad va bajarish usuliga ko'ra uch kategoriyaga bo'linishi mumkin. Har bir tur o'ziga xos ishlov berish qoidalari va interfeysda qo'llash bo'yicha tavsiyalarga ega.

Navigatsion jestlar

Navigatsion jestlar ekranlar o'rtasida harakatlanishni boshqaradi: qaytish uchun chap chekkadan surish (iOS), ilovalar almashtirgichini ochish uchun yuqoriga surish, bosh ekranga qaytish uchun pastki chekkadan surish. Bu jestlar tizim tomonidan Window darajasida qayta ishlanadi va ilova ichidagi foydalanuvchi jestlari bilan ziddiyatga kelmasligi kerak.

Manipulyatsion jestlar

Manipulyatsion jestlar ekrandagi ob'ektlarning joylashuvi, o'lchami yoki yo'nalishini o'zgartiradi. Pinch (ikki barmoq bilan masshtablash), Rotate (aylantirish), Pan (tortish), Swipe (tez surish) — bu jestlarning barchasi View yoki Composabale darajasida qayta ishlanadi va tizim navigatsiyasiga ta'sir qilmaydi.

Kontekstual jestlar

Kontekstual jestlar boshqa ekranga o'tmasdan qo'shimcha funksiyalarni faollashtiradi. Long press (kontekst menyusi uchun uzoq bosish), Double tap (layk yoki masshtablash uchun ikki marta bosish), Edge swipe (Drawer ochish uchun chekkadan surish). Bu jestlar eng ehtiyotkorlik bilan amalga oshirishni talab qiladi, chunki ular tizim navigatsion jestlari bilan kesishishi mumkin.

Jest turiMisolIshlov berish darajasiTizim bilan ziddiyat
NavigatsionOrqaga surishWindow / SystemBirlamchi
ManipulyatsionPinch zoomViewYo'q
KontekstualLong pressViewMumkin

Android da Gesture Navigation: GestureDetector va MotionEvent

Android SDK past darajadagi MotionEvent dan yuqori darajadagi GestureDetector va GestureOverlayView gacha ko'p darajali jestlarni qayta ishlash tizimini taqdim etadi. Darajani to'g'ri tanlash jestning murakkabligi va ishlash talablariga bog'liq.

GestureDetector — asosiy klass

GestureDetector — MotionEvent ketma-ketligini aniq jestlarga aylantiruvchi yuqori darajadagi klass: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling. Dasturchi GestureDetector.SimpleOnGestureListener ning kerakli metodlarini bekor qiladi va tayyor tanib olingan hodisani oladi. GestureDetector masshtablashdan tashqari barcha standart jestlar uchun tavsiya etiladi — buning uchun ScaleGestureDetector mavjud.

kotlin
val gestureDetector = GestureDetector(this, object : GestureDetector.SimpleOnGestureListener() {
    override fun onFling(
        e1: MotionEvent?, e2: MotionEvent,
        velocityX: Float, velocityY: Float
    ): Boolean {
        val deltaX = e2.x - (e1?.x ?: 0f)
        return if (Math.abs(deltaX) > Math.abs(e2.y - (e1?.y ?: 0f))) {
            if (deltaX > 0) onSwipeRight() else onSwipeLeft()
            true
        } else false
    }
})

view.setOnTouchListener { _, event -> gestureDetector.onTouchEvent(event) }

Maxsus maqsadlar uchun TouchDelegate

TouchDelegate — View uchun teginish maydonini kengaytirish mexanizmi. Maqsadli element minimal teginish oʻlchami 48dp dan kichik bo'lganda ishlatiladi. Masalan, ekran burchagidagi kichik „Yopish" tugmasi ko'rinadigan oʻlchamini oʻzgartirmasdan urish maydonini kengaytiruvchi TouchDelegate oladi. Google 48x48dp dan kichik barcha interaktiv elementlar uchun TouchDelegate ni tavsiya qiladi.

Jetpack Compose dagi jestlar

Compose jestlarni qayta ishlash uchun modifikatorlarni taqdim etadi: clickable, draggable, swipeable, combinedClickable (double tap va long press uchun). Ichki tomondan, Compose past darajadagi ishlov berish uchun PointerInputScope dan foydalanadi, lekin ko'pchilik dasturchilar uchun yuqori darajadagi modifikatorlar yetarli. Maxsus jestlar uchun pointerInput awaitPointerEvent bilan ishlatiladi.

iOS da Gesture Navigation: UIGestureRecognizer va SwiftUI

iOS SDK UIGestureRecognizer arxitekturasidan foydalanadi — UITouch ketma-ketligini tahlil qiluvchi va ma'lum jestga mos kelishini aniqlovchi abstrakt asosiy klass. Apple imkon qadar standart recognizer lardan foydalanishni va faqat noyob jestlar uchun maxsus pastki klasslar yaratishni tavsiya qiladi.

UIKit da UIGestureRecognizer

UIKit tayyor recognizer lar to'plamini taqdim etadi: UITapGestureRecognizer, UISwipeGestureRecognizer, UIPanGestureRecognizer, UIPinchGestureRecognizer, UIRotationGestureRecognizer, UILongPressGestureRecognizer. Har bir recognizer holatlarga ega (possible, began, changed, ended, cancelled, failed) — dasturchi jestning turli bosqichlarida reaksiya berish uchun holatni kuzatadi.

swift
let swipeBack = UISwipeGestureRecognizer(
    target: self,
    action: #selector(handleSwipeBack)
)
swipeBack.direction = .right
view.addGestureRecognizer(swipeBack)

@objc func handleSwipeBack() {
    navigationController?.popViewController(animated: true)
}

SwiftUI dagi jestlar

SwiftUI Compose ga o'xshab deklarativ jest modifikatorlaridan foydalanadi: onTapGesture, onLongPressGesture, MagnificationGesture, RotationGesture, DragGesture. SwiftUI simultaneousGesture, sequencedGesture va exclusiveGesture orqali jestlar o'rtasidagi ziddiyatlarni avtomatik qayta ishlaydi — bir vaqtda faollashganda jestlarning ustuvorligini belgilovchi modifikatorlar.

swift
Image("photo")
    .gesture(
        MagnificationGesture()
            .onChanged { scale in
                self.currentScale = scale
            }
            .sequenced(before: DragGesture())
    )

InteractivePopGestureRecognizer

InteractivePopGestureRecognizer — UINavigationController da orqaga surishni boshqaruvchi tizim recognizer i. Odatiy bo'lib, ildiz ekrandan tashqari barcha ekranlar uchun faol. Agar ilovangiz maxsus NavigationBar dan foydalansa, interactivePopGestureRecognizer ishlamay qolishi mumkin — navigationController.interactivePopGestureRecognizer?.delegate orqali dasturiy faollashtirish talab qilinadi.

Tizim va foydalanuvchi jestlarining ziddiyati

Jest ziddiyati — jest navigatsiyasidagi eng qiyin muammolardan biridir. Foydalanuvchi jesti (masalan, chap chekkadan surish orqali Drawer ochish) tizim jesti bilan (iOS yoki Android da orqaga surish) bir-biriga to'g'ri kelganda, tizim qaysi jest ustuvorligini aniqlashi kerak. Ushbu ziddiyatni to'g'ri qayta ishlash UX uchun juda muhimdir.

Android da yechim: Insets va SystemGestureExclusionRects

Android 10+ ilovaga WindowInsets orqali oʻz jestlari uchun ekran maydonlarini rezerv qilishga imkon beradi. Tizim jestlari ishlamasligi kerak bo'lgan hududlarni ko'rsatish uchun ViewCompat.setSystemGestureExclusionRects dan foydalaning. Masalan, chap tomondagi Drawer uchun chap ekran chekkasini (kengligi 200dp gacha) tizim orqaga surishidan istisno qilishingiz mumkin. Google chegara belgilagan: har tomondan 200dp gacha istisno qilish mumkin.

kotlin
val exclusionRect = Rect(0, 0, 200, height)
ViewCompat.setSystemGestureExclusionRects(
    drawerView,
    listOf(SystemGestureExclusionRect(exclusionRect))
)

iOS da yechim: UIGestureRecognizerDelegate

iOS UIGestureRecognizerDelegate da gestureRecognizerShouldBegin metodini taqdim etadi, bu maxsus recognizerga tanib olishni boshlash kerakligi haqida qaror qabul qilish imkonini beradi. Chap chekkadan Drawer surish uchun teginish joyini tekshirish mumkin: agar foydalanuvchi Drawer ni tortsa (masofa threshold dan katta), maxsus jest boshqaruvni oladi. Agar jest tanib olinmasa, tizim boshqaruvni InteractivePopGestureRecognizerga qaytaradi.

Oddiy xatolar va eng yaxshi amaliyotlar

Gesture Navigation diqqat bilan loyihalashni talab qiladi, ayniqsa tizim jest navigatsiyasiga ega qurilmalarda. Keng tarqalgan xatolar va ularni bartaraf etish bo'yicha tavsiyalarni ko'rib chiqaylik.

Xato: ekran chekkalaridagi ziddiyat zonalarini e'tiborsiz qoldirish

Eng keng tarqalgan xato — interaktiv elementlarni joylashtirish yoki tizim jest zonalarida (chap va o'ng chekkalar, pastki chekka) maxsus surishlarni amalga oshirish. Foydalanuvchi harakatni bajarishga urinadi, buning o'rniga tizim navigatsiyasi ishga tushadi. Har doim tizim jestlari uchun bo'shliqlarni nazarda tuting va ziddiyatlarni exclusion rects orqali qayta ishlang.

Xato: Android va iOS da turlicha tanib olish tezligi

Jest parametrlari (velocity threshold, minimum distance) odatiy bo'lib platformalar orasida farqlanadi. Ilovangiz ko'p platformali bo'lsa, parametrlarni bir platformadan ikkinchisiga nusxalamang — har bir jestni Android va iOS da alohida sinab ko'ring. Flutter va React Native ba'zi parametrlarni avtomatik moslashtiradi, lekin hammasini emas.

Eng yaxshi amaliyot: vizual qayta aloqa

Har bir jest vizual qayta aloqa bilan birga bo'lishi kerak: rang o'zgarishi, transformatsiya, animatsiya. Foydalanuvchi jestning tanib olinganligini va harakatning bajarilayotganligini tushunishi kerak. iOS da tizim recognizerlari avtomatik haptik feedback beradi, Android da uni HapticFeedbackConstants orqali qo'shish kerak.

Eng yaxshi amaliyot: jestlar uchun foydalanish qulayligi

Hamma foydalanuvchilar jestlarni bajara olmaydi — cheklangan motorikasi bo'lgan odamlar navigatsiya uchun VoiceOver va TalkBack dan foydalanadi. Har bir jest uchun tugma alternativi bo'lishi kerak. Google va Apple barcha jest harakatlarining foydalanish qulayligi uchun boshqaruv elementlari bilan takrorlanishini talab qiladi.

Tez-tez beriladigan savollar

Qaysi platforma jest navigatsiyasini birinchi bo'lib joriy qildi?

iOS — Apple 2017 yilda iPhone X bilan jest navigatsiyasini joriy qildi, Home tugmasini pastki chekkadan surish bilan almashtirdi. Android 10 da (2020) misolga ergashdi, jestlarni tugmalarga muqobil sifatida taklif qildi.

Maxsus amalga oshirishda swipni scrolldan qanday ajratish mumkin?

Swip — yuqori velocity (piksel/s) bilan tez harakat va uzilishli. Scroll — past velocity bilan sekin harakat va uzluksiz. Farqlash uchun velocityX/Y dan foydalaning: chegara odatda platformaga qarab 500-1000 px/s ni tashkil qiladi.

Ilovada tizim jest navigatsiyasini o'chirish mumkinmi?

Yo'q — Android va iOS ilovaga tizim jest navigatsiyasini o'chirishga ruxsat bermaydi. Siz faqat exclusion rects (Android) yoki gestureRecognizerShouldBegin (iOS) orqali ekran maydonlarini rezerv qilishingiz mumkin.

Emulator da jestlarni qanday test qilish mumkin?

Android Emulator Ctrl+klik orqali multitouch ni qo'llab-quvvatlaydi (ikkinchi barmoq qo'shilishi). iOS Simulator — ikki barmoq uchun Option+klik. Flutter test unit testlarda swiplarni simulyatsiya qilish uchun WidgetTester.timedDrag dan foydalanadi.

Gesture War nima va undan qanday qochish mumkin?

Gesture War — ikki recognizer o'rtasidagi ziddiyat, ikkalasi ham bitta teginishni qayta ishlashga urinishganda. Ustuvorliklar orqali qoching: iOS da require(toFail:) dan foydalaning, Compose da — sequentialGesture va exclusiveGesture. Flutter avtomatik hal qilish uchun GestureArena dan foydalanadi.

Xulosa

  • Gesture Navigation — sensor jestlar orqali ilovani boshqarish, Android 10+ va iOS 7+ da standartga aylandi
  • Uch kategoriya jest: navigatsion (swiplar), manipulyatsion (pinch, rotate) va kontekstual (long press)
  • GestureDetector Android da va UIGestureRecognizer iOS da — jestlarni qayta ishlashning asosiy klasslari
  • Jetpack Compose va SwiftUI barcha standart jestlar uchun deklarativ modifikatorlarni taqdim etadi
  • Jest ziddiyati exclusion rects (Android) va gestureRecognizerShouldBegin (iOS) orqali hal qilinadi
  • Vizual qayta aloqa va foydalanish qulayligi — jest navigatsiyasi uchun majburiy talablar
  • Jest parametrlari platformalar orasida farqlanadi — threshold va velocity ni to'g'ridan-to'g'ri nusxalamang

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing