Gesture Navigation — necə qurulub, növləri və tətbiqi

Müəllif: IT Sectr Dərc olunub: 2026-06-10 Oxuma vaxtı: 10 dəq

Gesture Navigation — müasir smartfonların əksəriyyətində aparat düymələrini əvəz edən, mobil tətbiqi sensor jestlər vasitəsilə idarə etmə sistemidir. Android Developers (2024) məlumatına görə, jest naviqasiyası Android 10-dan etibarən standart halına gəldi və Apple 2017-ci ildə iPhone X ilə jestlərə keçdi. Sistem swipe, pinch, double tap və long press daxildir — hər jestin ekran kontekstində müəyyən təyinatı var. Anlamaq jest naviqasiyasının arxitekturasını intuitiv və cavabdeh interfeyslər yaratmaq üçün vacibdir.

Əsas məqamlar

  • Gesture Navigation — düymələr əvəzinə sensor jestlər vasitəsilə tətbiqin idarə edilməsi
  • Üç növ jest: naviqasiya, manipulyasiya və kontekstual
  • Android 10+iOS 7+ jestləri sistem naviqasiya üsulu kimi istifadə edir
  • GestureDetector — Android View-də jestlərin emalı üçün əsas sinif
  • UIGestureRecognizer — iOS UIKit-də bütün jestlər üçün abstrakt sinif

Gesture Navigation nədir

Gesture Navigation — istifadəçinin mobil cihazla sensor ekran tərəfindən tanınan toxunma, hərəkət və basma ardıcıllıqları vasitəsilə qarşılıqlı əlaqə metodudur. Ənənəvi düymələrdən fərqli olaraq, jestlərin ekranda sabit mövqeyi yoxdur və onlar hərəkət nümunəsinə görə tanınır: kənardan sürüşdürmə, iki barmaqla çimdik, uzun basma.

Jest naviqasiyasına keçid iPhone X ilə başladı (2017), Apple Home düyməsini tamamilə çıxararaq onu aşağı kənardan sürüşdürmə ilə əvəz etdi. Google Android 10-da (2020) trendi izlədi və istifadəçilərə seçim təklif etdi: üç düyməli naviqasiya, iki düyməli naviqasiya və tam jest naviqasiyası. StatCounter (2025) məlumatına görə, Android cihazlarının 75%-dən çoxu və iOS cihazlarının 95%-i jest naviqasiyasından istifadə edir.

Arxitektura baxımından jest tanınması üç mərhələdən ibarətdir: Capture (sensor hadisələrinin ələ keçirilməsi), Recognition (hərəkət nümunəsinin müəyyən edilməsi) və Action (təyin edilmiş hərəkətin icrası). Sistem səviyyəsində Android və iOS əsas naviqasiya jestləri üçün daxili emalçılara malikdir — geri sürüşdürmə, əsas ekrana keçid, tətbiq dəyişdiricisinin açılması. Tərtibatçı yalnız öz jestlərini bu sistemə düzgün inteqrasiya etməlidir.

Mobil naviqasiyada jest növləri

Bütün sensor jestlər məqsəd və icra üsuluna görə üç kateqoriyaya bölünə bilər. Hər növün öz emal qaydaları və interfeysdə tətbiq üçün tövsiyələri var.

Naviqasiya jestləri

Naviqasiya jestləri ekranlar arasında hərəkəti idarə edir: geri qayıtmaq üçün sol kənardan sürüşdürmə (iOS), tətbiq dəyişdiricisini açmaq üçün yuxarı sürüşdürmə, əsas ekrana qayıtmaq üçün aşağı kənardan sürüşdürmə. Bu jestlər sistem tərəfindən Window səviyyəsində emal edilir və tətbiq daxilində istifadəçi jestləri ilə ziddiyyət təşkil etməməlidir.

Manipulyasiya jestləri

Manipulyasiya jestləri ekrandakı obyektlərin mövqeyini, ölçüsünü və ya oriyentasiyasını dəyişir. Pinch (iki barmaqla miqyaslama), Rotate (fırlatma), Pan (sürükləmə), Swipe (sürətli sürüşdürmə) — bütün bu jestlər View və ya Composabale səviyyəsində emal edilir və sistem naviqasiyasına təsir etmir.

Kontekstual jestlər

Kontekstual jestlər başqa ekrana keçmədən əlavə funksiyaları aktivləşdirir. Long press (kontekst menyusu üçün uzun basma), Double tap (bəyənmə və ya miqyaslama üçün ikiqat basma), Edge swipe (Drawer açmaq üçün kənardan sürüşdürmə). Bu jestlər ən diqqətli tətbiq tələb edir, çünki sistem naviqasiya jestləri ilə kəsişə bilər.

Jest növüNümunəEmal səviyyəsiSistem konflikti
NaviqasiyaGeri sürüşdürməWindow / SystemBirincili
ManipulyasiyaPinch zoomViewYox
KontekstualLong pressViewMümkün

Android-də Gesture Navigation: GestureDetector və MotionEvent

Android SDK aşağı səviyyəli MotionEvent-dən yüksək səviyyəli GestureDetector və GestureOverlayView-ə qədər çoxsəviyyəli jest emal sistemi təmin edir. Səviyyənin düzgün seçimi jestin mürəkkəbliyindən və performans tələblərindən asılıdır.

GestureDetector — əsas sinif

GestureDetector — MotionEvent ardıcıllığını konkret jestlərə çevirən yüksək səviyyəli sinif: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling. Tərtibatçı GestureDetector.SimpleOnGestureListener-in lazımi metodlarını ləğv edir və hazır tanınmış hadisəni alır. GestureDetector miqyaslamadan başqa bütün standart jestlər üçün tövsiyə olunur — bunun üçün ScaleGestureDetector var.

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) }

Xüsusi məqsədlər üçün TouchDelegate

TouchDelegate — View üçün toxunma sahəsini genişləndirmə mexanizmi. Hədəf element minimum toxunma ölçüsü 48dp-dən kiçik olduqda istifadə olunur. Məsələn, ekranın küncündəki kiçik „Bağla" düyməsi görünən ölçüsünü dəyişmədən vurma sahəsini genişləndirən TouchDelegate alır. Google 48x48dp-dən kiçik bütün interaktiv elementlər üçün TouchDelegate tövsiyə edir.

Jetpack Compose-da jestlər

Compose jestlərin emalı üçün modifikatorlar təmin edir: clickable, draggable, swipeable, combinedClickable (double tap və long press üçün). Daxildə Compose aşağı səviyyəli emal üçün PointerInputScope istifadə edir, lakin tərtibatçıların əksəriyyətinə yüksək səviyyəli modifikatorlar kifayət edir. Xüsusi jestlər üçün pointerInput awaitPointerEvent ilə istifadə olunur.

iOS-da Gesture Navigation: UIGestureRecognizer və SwiftUI

iOS SDK UIGestureRecognizer arxitekturasından istifadə edir — UITouch ardıcıllığını təhlil edən və tanınmış jestə uyğun olub-olmadığını müəyyən edən abstrakt əsas sinif. Apple mümkün olan hər yerdə standart recognizer istifadə etməyi və yalnız unikal jestlər üçün xüsusi alt siniflər yaratmağı tövsiyə edir.

UIKit-də UIGestureRecognizer

UIKit hazır recognizer dəsti təmin edir: UITapGestureRecognizer, UISwipeGestureRecognizer, UIPanGestureRecognizer, UIPinchGestureRecognizer, UIRotationGestureRecognizer, UILongPressGestureRecognizer. Hər recognizer-in vəziyyətləri var (possible, began, changed, ended, cancelled, failed) — tərtibatçı jestin müxtəlif mərhələlərində reaksiya vermək üçün vəziyyəti izləyir.

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

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

SwiftUI-da jestlər

SwiftUI Compose kimi deklarativ jest modifikatorlarından istifadə edir: onTapGesture, onLongPressGesture, MagnificationGesture, RotationGesture, DragGesture. SwiftUI simultaneousGesture, sequencedGesture və exclusiveGesture vasitəsilə jestlər arasında konfliktləri avtomatik emal edir — eyni vaxtda işə düşmə zamanı jestlərin prioritetini təyin edən modifikatorlar.

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

InteractivePopGestureRecognizer

InteractivePopGestureRecognizer — UINavigationController-da geri sürüşdürməni idarə edən sistem recognizer-i. Susmaya görə, kök ekrandan başqa bütün ekranlar üçün aktivdir. Tətbiqiniz xüsusi NavigationBar istifadə edərsə, interactivePopGestureRecognizer işləməyə bilər — navigationController.interactivePopGestureRecognizer?.delegate vasitəsilə proqram aktivasiyası tələb olunur.

Sistem və istifadəçi jestlərinin konflikti

Jest konflikti — jest naviqasiyasında ən çətin problemlərdən biridir. İstifadəçi jesti (məsələn, sol kənardan sürüşdürmə ilə Drawer açmaq) sistem jesti ilə (iOS və ya Android-də geri sürüşdürmə) üst-üstə düşdükdə, sistem hansı jestin prioritet olduğunu müəyyən etməlidir. Bu konfliktin düzgün emalı UX üçün kritikdir.

Android-də həll: Insets və SystemGestureExclusionRects

Android 10+ tətbiqə WindowInsets vasitəsilə öz jestləri üçün ekran sahələrini rezerv etməyə icazə verir. Sistem jestlərinin işləməməli olduğu bölgələri göstərmək üçün ViewCompat.setSystemGestureExclusionRects istifadə edin. Məsələn, sol tərəfdəki Drawer üçün sol ekran kənarını (en 200dp-ə qədər) sistem geri sürüşdürməsindən xaric edə bilərsiniz. Google limit təyin edib: hər tərəfdən 200dp-ə qədər xaric etmək olar.

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

iOS-da həll: UIGestureRecognizerDelegate

iOS UIGestureRecognizerDelegate-də gestureRecognizerShouldBegin metodunu təmin edir ki, bu da xüsusi recognizer-ə tanımaya başlamalı olub-olmadığına qərar verməyə imkan verir. Sol kənardan Drawer sürüşdürməsi üçün toxunma mövqeyini yoxlamaq olar: istifadəçi Drawer-i çəkirsə (məsafə threshold-dan çox), xüsusi jest idarəni ələ keçirir. Jest tanınmazsa, sistem idarəni InteractivePopGestureRecognizer-ə qaytarır.

Tipik səhvlər və ən yaxşı təcrübələr

Gesture Navigation diqqətli dizayn tələb edir, xüsusən sistem jest naviqasiyası olan cihazlarda. Tez-tez rast gəlinən səhvləri və onların aradan qaldırılması üçün tövsiyələri nəzərdən keçirək.

Səhv: ekran kənarlarında konflikt zonalarının nəzərə alınmaması

Ən geniş yayılmış səhv — interaktiv elementlərin yerləşdirilməsi və ya sistem jest zonalarında (sol və sağ kənarlar, aşağı kənar) xüsusi sürüşdürmələrin tətbiqi. İstifadəçi hərəkət etməyə çalışır, əvəzində sistem naviqasiyası işə düşür. Həmişə sistem jestləri üçün boşluqlar nəzərdə tutun və konfliktləri exclusion rects vasitəsilə emal edin.

Səhv: Android və iOS-da fərqli tanınma sürəti

Jest parametrləri (velocity threshold, minimum distance) susmaya görə platformalar arasında fərqlənir. Tətbiqiniz çoxplatformalıdırsa, parametrləri bir platformadan digərinə köçürməyin — hər jesti Android və iOS-da ayrıca test edin. Flutter və React Native bəzi parametrləri avtomatik uyğunlaşdırır, lakin hamısını yox.

Ən yaxşı təcrübə: vizual əks əlaqə

Hər jest vizual əks əlaqə ilə müşayiət olunmalıdır: rəng dəyişikliyi, transformasiya, animasiya. İstifadəçi jestin tanındığını və hərəkətin icra olunduğunu başa düşməlidir. iOS-da sistem recognizer avtomatik haptic feedback verir, Android-də onu HapticFeedbackConstants vasitəsilə əlavə etmək lazımdır.

Ən yaxşı təcrübə: jestlər üçün əlçatanlıq

Bütün istifadəçilər jestləri yerinə yetirə bilməz — məhdud motorikası olan insanlar naviqasiya üçün VoiceOver və TalkBack istifadə edir. Hər jest üçün düymə alternativi olmalıdır. Google və Apple bütün jest hərəkətlərinin əlçatanlıq üçün idarəetmə elementləri ilə təkrarlanmasını tələb edir.

Tez-tez verilən suallar

Hansı platforma jest naviqasiyasını ilk tətbiq etdi?

iOS — Apple 2017-ci ildə iPhone X ilə jest naviqasiyasını tətbiq etdi, Home düyməsini aşağı kənardan sürüşdürmə ilə əvəz etdi. Android 10-da (2020) nümunəni izlədi, jestləri düymələrə alternativ olaraq təklif etdi.

Xüsusi tətbiqde swipi scrolldan necə ayırd etmək olar?

Swip — yüksək velocity (piksel/san) ilə sürətli hərəkət və fasiləlidir. Scroll — aşağı velocity ilə yavaş hərəkət və davamlıdır. Fərqləndirmək üçün velocityX/Y istifadə edin: hədd adətən platformadan asılı olaraq 500-1000 px/s təşkil edir.

Tətbiqdə sistem jest naviqasiyasını söndürmək olarmı?

Xeyr — Android və iOS tətbiqə sistem jest naviqasiyasını söndürməyə icazə vermir. Yalnız exclusion rects (Android) və ya gestureRecognizerShouldBegin (iOS) vasitəsilə ekran sahələrini rezerv edə bilərsiniz.

Emulatorda jestləri necə test etmək olar?

Android Emulator Ctrl+klik vasitəsilə multitouchu dəstəkləyir (ikinci barmağın əlavə edilməsi). iOS Simulator — iki barmaq üçün Option+klik. Flutter test vahid testlərdə swipləri simulyasiya etmək üçün WidgetTester.timedDrag istifadə edir.

Gesture War nədir və ondan necə qaçınmaq olar?

Gesture War — iki recognizer arasında konflikt, hər ikisi bir toxunmanı emal etməyə çalışdıqda. Prioritetlər vasitəsilə qaçının: iOS-da require(toFail:) istifadə edin, Compose-da — sequentialGesture və exclusiveGesture. Flutter avtomatik həll üçün GestureArena istifadə edir.

Nəticə

  • Gesture Navigation — sensor jestlər vasitəsilə tətbiq idarəsi, Android 10+ və iOS 7+ standartı halına gəldi
  • Üç kateqoriya jest: naviqasiya (swiplər), manipulyasiya (pinch, rotate) və kontekstual (long press)
  • GestureDetector Android-də və UIGestureRecognizer iOS-da — jest emalının əsas sinifləri
  • Jetpack ComposeSwiftUI bütün standart jestlər üçün deklarativ modifikatorlar təmin edir
  • Jest konflikti exclusion rects (Android) və gestureRecognizerShouldBegin (iOS) vasitəsilə həll olunur
  • Vizual əks əlaqə və əlçatanlıq — jest naviqasiyası üçün məcburi tələblər
  • Jest parametrləri platformalar arasında fərqlənir — threshold və velocity-ni birbaşa köçürməyin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun