Gesture Navigation — πώς είναι δομημένο, τύποι και υλοποίηση

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-06-10 Χρόνος ανάγνωσης: 10 λεπ

Gesture Navigation — είναι ένα σύστημα ελέγχου της εφαρμογής για κινητά μέσω απτικών χειρονομιών, το οποίο αντικατέστησε τα φυσικά κουμπιά στα περισσότερα σύγχρονα smartphone. Σύμφωνα με το Android Developers (2024), η πλοήγηση με χειρονομίες έγινε στάνταρ από το Android 10, και η Apple πέρασε στις χειρονομίες ήδη από το iPhone X το 2017. Το σύστημα περιλαμβάνει swipe, pinch, double tap και long press — κάθε χειρονομία έχει συγκεκριμένο σκοπό στο πλαίσιο της οθόνης. Η κατανόηση της αρχιτεκτονικής της πλοήγησης με χειρονομίες είναι απαραίτητη για τη δημιουργία διαισθητικών και ανταποκρινόμενων διεπαφών.

Κύρια σημεία

  • Gesture Navigation — έλεγχος εφαρμογής μέσω απτικών χειρονομιών αντί για κουμπιά
  • Τρεις τύποι χειρονομιών: πλοήγησης, χειρισμού και συμφραζομένων
  • Android 10+ και iOS 7+ χρησιμοποιούν χειρονομίες ως συστημικό τρόπο πλοήγησης
  • GestureDetector — η βασική κλάση επεξεργασίας χειρονομιών στο Android View
  • UIGestureRecognizer — η αφηρημένη κλάση για όλες τις χειρονομίες στο iOS UIKit

Τι είναι το Gesture Navigation

Gesture Navigation — είναι μια μέθοδος αλληλεπίδρασης του χρήστη με μια κινητή συσκευή μέσω ακολουθιών αφής, κινήσεων και πιέσεων που αναγνωρίζονται από την οθόνη αφής. Σε αντίθεση με τα παραδοσιακά κουμπιά, οι χειρονομίες δεν έχουν σταθερή θέση στην οθόνη και αναγνωρίζονται βάσει του μοτίβου κίνησης: swipe από την άκρη, pinch με δύο δάχτυλα, παρατεταμένο πάτημα.

Η μετάβαση στην πλοήγηση με χειρονομίες ξεκίνησε με το iPhone X (2017), όπου η Apple αφαίρεσε εντελώς το κουμπί Home, αντικαθιστώντας το με swipe από το κάτω άκρο. Η Google ακολούθησε την τάση στο Android 10 (2020), προσφέροντας στους χρήστες επιλογή: πλοήγηση με τρία κουμπιά, πλοήγηση με δύο κουμπιά και πλήρης πλοήγηση με χειρονομίες. Σύμφωνα με το StatCounter (2025), πάνω από το 75% των συσκευών Android και το 95% των συσκευών iOS χρησιμοποιούν πλοήγηση με χειρονομίες.

Αρχιτεκτονικά, η αναγνώριση χειρονομιών αποτελείται από τρία στάδια: Capture (καταγραφή συμβάντων αφής), Recognition (προσδιορισμός μοτίβου κίνησης) και Action (εκτέλεση της εκχωρημένης ενέργειας). Σε συστημικό επίπεδο, τα Android και iOS διαθέτουν ενσωματωμένους επεξεργαστές για βασικές χειρονομίες πλοήγησης — swipe πίσω, μετάβαση στην αρχική οθόνη, άνοιγμα εναλλαγής εφαρμογών. Ο προγραμματιστής χρειάζεται μόνο να ενσωματώσει σωστά τις χειρονομίες του σε αυτό το σύστημα.

Τύποι χειρονομιών στην κινητή πλοήγηση

Όλες οι απτικές χειρονομίες μπορούν να χωριστούν σε τρεις κατηγορίες ανάλογα με τον σκοπό και τον τρόπο εκτέλεσης. Κάθε τύπος έχει τους δικούς του κανόνες επεξεργασίας και συστάσεις για χρήση στη διεπαφή.

Χειρονομίες πλοήγησης

Οι χειρονομίες πλοήγησης ελέγχουν τη μετακίνηση μεταξύ οθονών: swipe από το αριστερό άκρο για επιστροφή (iOS), swipe προς τα πάνω για άνοιγμα εναλλαγής εφαρμογών, swipe από το κάτω άκρο για επιστροφή στην αρχική οθόνη. Αυτές οι χειρονομίες υποβάλλονται σε επεξεργασία από το σύστημα σε επίπεδο Window και δεν θα πρέπει να έρχονται σε σύγκρουση με τις χειρονομίες του χρήστη εντός της εφαρμογής.

Χειρονομίες χειρισμού

Οι χειρονομίες χειρισμού αλλάζουν τη θέση, το μέγεθος ή τον προσανατολισμό των αντικειμένων στην οθόνη. Pinch (κλιμάκωση με δύο δάχτυλα), Rotate (περιστροφή), Pan (σύρσιμο), Swipe (γρήγορο swipe για κύλιση) — όλες αυτές οι χειρονομίες υποβάλλονται σε επεξεργασία σε επίπεδο View ή Composabale και δεν επηρεάζουν τη συστημική πλοήγηση.

Χειρονομίες συμφραζομένων

Οι χειρονομίες συμφραζομένων ενεργοποιούν πρόσθετες λειτουργίες χωρίς μετάβαση σε άλλη οθόνη. Long press (παρατεταμένο πάτημα για μενού συμφραζομένων), Double tap (διπλό πάτημα για like ή μεγέθυνση), Edge swipe (swipe από την άκρη για άνοιγμα Drawer). Αυτές οι χειρονομίες απαιτούν την πιο προσεκτική υλοποίηση, καθώς μπορεί να επικαλύπτονται με συστημικές χειρονομίες πλοήγησης.

Τύπος χειρονομίαςΠαράδειγμαΕπίπεδο επεξεργασίαςΣύγκρουση με σύστημα
ΠλοήγησηςSwipe πίσωWindow / SystemΠρωτεύον
ΧειρισμούPinch zoomViewΌχι
ΣυμφραζομένωνLong pressViewΠιθανή

Gesture Navigation στο Android: GestureDetector και MotionEvent

Το Android SDK παρέχει ένα πολυεπίπεδο σύστημα επεξεργασίας χειρονομιών, από το χαμηλού επιπέδου MotionEvent έως το υψηλού επιπέδου GestureDetector και GestureOverlayView. Η σωστή επιλογή επιπέδου εξαρτάται από την πολυπλοκότητα της χειρονομίας και τις απαιτήσεις απόδοσης.

GestureDetector — η βασική κλάση

GestureDetector — είναι μια κλάση υψηλού επιπέδου που μετατρέπει μια ακολουθία MotionEvent σε συγκεκριμένες χειρονομίες: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling. Ο προγραμματιστής παρακάμπτει τις απαραίτητες μεθόδους του GestureDetector.SimpleOnGestureListener και λαμβάνει το έτοιμο αναγνωρισμένο συμβάν. Το GestureDetector συνιστάται για όλες τις τυπικές χειρονομίες, εκτός από την κλιμάκωση — για αυτήν υπάρχει το ScaleGestureDetector.

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

TouchDelegate για προσαρμοσμένους στόχους

TouchDelegate — ένας μηχανισμός επέκτασης της περιοχής αφής για View. Χρησιμοποιείται όταν το στοιχείο-στόχος είναι μικρότερο από το ελάχιστο μέγεθος αφής 48dp. Για παράδειγμα, ένα μικρό κουμπί “Κλείσιμο” στη γωνία της οθόνης λαμβάνει ένα TouchDelegate που επεκτείνει την περιοχή χτυπήματος χωρίς να αλλάζει το ορατό μέγεθος. Η Google συνιστά το TouchDelegate για όλα τα διαδραστικά στοιχεία μικρότερα από 48x48dp.

Χειρονομίες στο Jetpack Compose

Το Compose παρέχει τροποποιητές για την επεξεργασία χειρονομιών: clickable, draggable, swipeable, combinedClickable (για double tap και long press). Εσωτερικά, το Compose χρησιμοποιεί το PointerInputScope για επεξεργασία χαμηλού επιπέδου, αλλά για τους περισσότερους προγραμματιστές αρκούν οι τροποποιητές υψηλού επιπέδου. Για προσαρμοσμένες χειρονομίες χρησιμοποιείται το pointerInput με awaitPointerEvent.

Gesture Navigation στο iOS: UIGestureRecognizer και SwiftUI

Το iOS SDK χρησιμοποιεί την αρχιτεκτονική UIGestureRecognizer — μια αφηρημένη βασική κλάση που αναλύει μια ακολουθία UITouch και καθορίζει αν αντιστοιχεί σε μια γνωστή χειρονομία. Η Apple συνιστά τη χρήση τυπικών recognizer όπου είναι δυνατόν, και μόνο για μοναδικές χειρονομίες τη δημιουργία προσαρμοσμένων υποκλάσεων.

UIGestureRecognizer στο UIKit

Το UIKit παρέχει ένα σύνολο έτοιμων recognizer: UITapGestureRecognizer, UISwipeGestureRecognizer, UIPanGestureRecognizer, UIPinchGestureRecognizer, UIRotationGestureRecognizer, UILongPressGestureRecognizer. Κάθε recognizer έχει καταστάσεις (possible, began, changed, ended, cancelled, failed) — ο προγραμματιστής παρακολουθεί την κατάσταση για να αντιδράσει σε διαφορετικά στάδια της χειρονομίας.

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

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

Χειρονομίες στο SwiftUI

Το SwiftUI χρησιμοποιεί δηλωτικούς τροποποιητές χειρονομιών, παρόμοια με το Compose: onTapGesture, onLongPressGesture, MagnificationGesture, RotationGesture, DragGesture. Το SwiftUI χειρίζεται αυτόματα τις συγκρούσεις μεταξύ χειρονομιών μέσω simultaneousGesture, sequencedGesture και exclusiveGesture — τροποποιητών που καθορίζουν την προτεραιότητα των χειρονομιών κατά την ταυτόχρονη ενεργοποίηση.

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

InteractivePopGestureRecognizer

InteractivePopGestureRecognizer — ο συστημικός recognizer που διαχειρίζεται το swipe πίσω στο UINavigationController. Από προεπιλογή, είναι ενεργός για όλες τις οθόνες εκτός από την αρχική. Εάν η εφαρμογή σας χρησιμοποιεί προσαρμοσμένο NavigationBar, το interactivePopGestureRecognizer μπορεί να σταματήσει να λειτουργεί — θα απαιτηθεί προγραμματιστική ενεργοποίηση μέσω navigationController.interactivePopGestureRecognizer?.delegate.

Σύγκρουση συστημικών και χρηστικών χειρονομιών

Σύγκρουση χειρονομιών — ένα από τα πιο δύσκολα προβλήματα στην πλοήγηση με χειρονομίες. Όταν μια χειρονομία χρήστη (για παράδειγμα, άνοιγμα Drawer με swipe από το αριστερό άκρο) επικαλύπτεται με μια συστημική χειρονομία (swipe πίσω σε iOS ή Android), το σύστημα πρέπει να καθορίσει ποια χειρονομία έχει προτεραιότητα. Η σωστή διαχείριση αυτής της σύγκρουσης είναι κρίσιμη για την εμπειρία χρήστη.

Λύση στο Android: Insets και SystemGestureExclusionRects

Android 10+ επιτρέπει στην εφαρμογή να δεσμεύσει περιοχές οθόνης για τις δικές της χειρονομίες μέσω WindowInsets. Χρησιμοποιήστε το ViewCompat.setSystemGestureExclusionRects για να υποδείξετε περιοχές όπου οι συστημικές χειρονομίες δεν πρέπει να λειτουργούν. Για παράδειγμα, για ένα Drawer στα αριστερά, μπορείτε να εξαιρέσετε το αριστερό άκρο της οθόνης (πλάτος έως 200dp) από το συστημικό swipe πίσω. Η Google έχει θέσει όριο: έως 200dp σε κάθε πλευρά μπορούν να εξαιρεθούν.

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

Λύση στο iOS: UIGestureRecognizerDelegate

Το iOS παρέχει τη μέθοδο gestureRecognizerShouldBegin στο UIGestureRecognizerDelegate, η οποία επιτρέπει στον προσαρμοσμένο recognizer να αποφασίσει αν πρέπει να ξεκινήσει την αναγνώριση. Για swipe Drawer από το αριστερό άκρο, μπορείτε να ελέγξετε τη θέση αφής: εάν ο χρήστης τραβά το Drawer (απόσταση μεγαλύτερη από threshold), η προσαρμοσμένη χειρονομία αναλαμβάνει τον έλεγχο. Εάν η χειρονομία δεν αναγνωριστεί, το σύστημα επιστρέφει τον έλεγχο στο InteractivePopGestureRecognizer.

Συνηθισμένα λάθη και βέλτιστες πρακτικές

Gesture Navigation απαιτεί προσεκτικό σχεδιασμό, ειδικά σε συσκευές με συστημική πλοήγηση με χειρονομίες. Ας εξετάσουμε τα συνηθισμένα λάθη και τις συστάσεις για την αντιμετώπισή τους.

Λάθος: αγνόηση ζωνών σύγκρουσης στα άκρα της οθόνης

Το πιο συνηθισμένο λάθος — τοποθέτηση διαδραστικών στοιχείων ή υλοποίηση προσαρμοσμένων swipe σε ζώνες συστημικών χειρονομιών (αριστερό και δεξί άκρο, κάτω άκρο). Ο χρήστης προσπαθεί να εκτελέσει μια ενέργεια, αλλά αντ' αυτού ενεργοποιείται η συστημική πλοήγηση. Πάντα να προβλέπετε χώρο για συστημικές χειρονομίες και να διαχειρίζεστε τις συγκρούσεις μέσω exclusion rects.

Λάθος: διαφορετική ταχύτητα αναγνώρισης σε Android και iOS

Οι παράμετροι χειρονομιών (velocity threshold, minimum distance) διαφέρουν από προεπιλογή μεταξύ πλατφορμών. Εάν η εφαρμογή σας είναι跨πλατφορμική, μην αντιγράφετε παραμέτρους από τη μία πλατφόρμα στην άλλη — δοκιμάστε κάθε χειρονομία ξεχωριστά σε Android και iOS. Τα Flutter και React Native προσαρμόζουν αυτόματα ορισμένες παραμέτρους, αλλά όχι όλες.

Βέλτιστη πρακτική: οπτική ανατροφοδότηση

Κάθε χειρονομία πρέπει να συνοδεύεται από οπτική ανατροφοδότηση: αλλαγή χρώματος, μετασχηματισμός, κινούμενο σχέδιο. Ο χρήστης πρέπει να καταλάβει ότι η χειρονομία αναγνωρίστηκε και η ενέργεια εκτελείται. Στο iOS, οι συστημικοί recognizer παρέχουν αυτόματα απτική ανατροφοδότηση, στο Android πρέπει να προστεθεί μέσω HapticFeedbackConstants.

Βέλτιστη πρακτική: προσβασιμότητα για χειρονομίες

Δεν μπορούν όλοι οι χρήστες να εκτελούν χειρονομίες — άτομα με περιορισμένη κινητικότητα χρησιμοποιούν VoiceOver και TalkBack για πλοήγηση. Για κάθε χειρονομία πρέπει να υπάρχει εναλλακτική κουμπιού. Η Google και η Apple απαιτούν όλες οι ενέργειες χειρονομιών να αντιγράφονται από προσβάσιμα στοιχεία ελέγχου.

Συχνές ερωτήσεις

Ποια πλατφόρμα εφάρμοσε πρώτη την πλοήγηση με χειρονομίες;

iOS — Η Apple εφάρμοσε την πλοήγηση με χειρονομίες με το iPhone X το 2017, αντικαθιστώντας το κουμπί Home με swipe από το κάτω άκρο. Το Android ακολούθησε το παράδειγμα στο Android 10 (2020), προσφέροντας χειρονομίες ως εναλλακτική στα κουμπιά.

Πώς διακρίνουμε το swipe από το scroll σε προσαρμοσμένη υλοποίηση;

Swipe — γρήγορη κίνηση με υψηλή velocity (pixel/sec) και διακοπτόμενη. Scroll — αργή κίνηση με χαμηλή velocity και συνεχής. Χρησιμοποιήστε velocityX/Y για διάκριση: το όριο είναι συνήθως 500-1000 px/s ανάλογα με την πλατφόρμα.

Μπορεί να απενεργοποιηθεί η συστημική πλοήγηση με χειρονομίες στην εφαρμογή;

Όχι — το Android και το iOS δεν επιτρέπουν στην εφαρμογή να απενεργοποιήσει τη συστημική πλοήγηση με χειρονομίες. Μπορείτε μόνο να δεσμεύσετε περιοχές οθόνης μέσω exclusion rects (Android) ή gestureRecognizerShouldBegin (iOS).

Πώς δοκιμάζουμε χειρονομίες στον εξομοιωτή;

Android Emulator υποστηρίζει πολλαπλή αφή μέσω Ctrl+κλικ (προσθήκη δεύτερου δαχτύλου). iOS Simulator — μέσω Option+κλικ για δύο δάχτυλα. Το Flutter test χρησιμοποιεί WidgetTester.timedDrag για προσομοίωση swipe σε unit tests.

Τι είναι το Gesture War και πώς να το αποφύγουμε;

Gesture War — σύγκρουση μεταξύ δύο recognizer όταν και οι δύο προσπαθούν να επεξεργαστούν μία αφή. Αποφύγετε μέσω προτεραιοτήτων: στο iOS χρησιμοποιήστε require(toFail:), στο Compose — sequentialGesture και exclusiveGesture. Το Flutter χρησιμοποιεί GestureArena για αυτόματη επίλυση.

Σύνοψη

  • Gesture Navigation — έλεγχος εφαρμογής μέσω απτικών χειρονομιών, έγινε στάνταρ σε Android 10+ και iOS 7+
  • Τρεις κατηγορίες χειρονομιών: πλοήγησης (swipe), χειρισμού (pinch, rotate) και συμφραζομένων (long press)
  • GestureDetector στο Android και UIGestureRecognizer στο iOS — οι βασικές κλάσεις επεξεργασίας χειρονομιών
  • Jetpack Compose και SwiftUI παρέχουν δηλωτικούς τροποποιητές για όλες τις τυπικές χειρονομίες
  • Σύγκρουση χειρονομιών επιλύεται μέσω exclusion rects (Android) και gestureRecognizerShouldBegin (iOS)
  • Οπτική ανατροφοδότηση και προσβασιμότητα — υποχρεωτικές απαιτήσεις για πλοήγηση με χειρονομίες
  • Οι παράμετροι χειρονομιών διαφέρουν μεταξύ πλατφορμών — μην αντιγράφετε threshold και velocity απευθείας

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης