Long Press — τι είναι, η χειρονομία της παρατεταμένης αφής σε εφαρμογές

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

Long Press — η χειρονομία παρατεταμένου πατήματος, κατά την οποία το δάχτυλο κρατιέται στην οθόνη για καθορισμένο χρόνο (συνήθως 0,5–1 δευτερόλεπτο) χωρίς κίνηση. Σε αντίθεση με το Tap, το Long Press αναγνωρίζεται όχι τη στιγμή της αφής, αλλά μετά τη λήξη του χρονοδιακόπτη καθυστέρησης. Η χειρονομία χρησιμοποιείται για κλήση αναδυόμενου μενού, προεπισκόπηση, επιλογή πολλών αντικειμένων και ενεργοποίηση επιπρόσθετων ενεργειών. Υλοποιείται σε iOS μέσω UILongPressGestureRecognizer, σε Android — μέσω setOnLongClickListener ή GestureDetector.

Βασικά σημεία

  • Καθυστέρηση — η κύρια διαφορά του Long Press από το Tap: απαιτείται κράτημα 0,5–1 δευτερολέπτου
  • Αναδυόμενο μενού — η πιο συχνή χρήση του Long Press: κλήση επιπρόσθετων επιλογών για ένα στοιχείο
  • UILongPressGestureRecognizer — η κύρια κλάση iOS για το χειρισμό παρατεταμένου πατήματος με callbacks κατάστασης
  • setOnLongClickListener — η μέθοδος Android View που καλεί τον ακροατή σε παρατεταμένο πάτημα
  • Multi-state — το Long Press διέρχεται από τις καταστάσεις began, changed, ended, cancelled σε iOS

Τι είναι το Long Press;

Long Press (παρατεταμένο πάτημα, παρατεταμένη αφή) — μια χειρονομία διεπαφής πολλαπλών αφών, κατά την οποία ο χρήστης αγγίζει την οθόνη και κρατά το δάχτυλο ακίνητο για καθορισμένο χρόνο. Το σύστημα δεν αντιδρά αμέσως: περιμένει ένα timeout (συνήθως 500 ms) και μόνο μετά τη λήξη του αναγνωρίζει τη χειρονομία ως Long Press. Αν το δάχτυλο απελευθερωθεί νωρίτερα — η χειρονομία ερμηνεύεται ως συνηθισμένο Tap.

Η χειρονομία είναι ένα θεμελιώδες δομικό στοιχείο των σύγχρονων κινητών διεπαφών. Η Apple τη χρησιμοποιεί για κλήσεις αναδυόμενων μενού σε εφαρμογές (Messages, Safari, Files). Η Google εφήρμοσε το Long Press στο σύστημα επιλογής κειμένου, μετακίνησης εικονιδίων στην επιφάνεια εργασίας και κλήσεων αναδυόμενων μενού σε Android. Σε διαδικτυακές διεπαφές, το παρατεταμένο πάτημα συχνά μιμείται το δεξί κλικ του ποντικιού σε κινητές συσκευές που δεν έχουν φυσικό δεξί κουμπί.

Ιστορικά, το Long Press εμφανίστηκε ως εναλλακτική του αναδυόμενου μενού (δεξί κλικ) για οθόνες αφής. Οι πρώτες υλοποιήσεις βρίσκονται σε συσκευές με αντιστατικές οθόνες (Palm, Windows Mobile αρχές της δεκαετίας 2000), αλλά η χειρονομία τυποποιήθηκε μόνο με την έλευση iPhone και Android. Οι Κατευθυντήριες Γραμμές Διεπαφής και για τις δύο πλατφόρμες περιγράφουν το Long Press ως δευτερεύουσα ενέργεια — όχι αντικατάσταση του Tap, αλλά επέκταση της λειτουργικότητας.

Ποια είναι η διαφορά του Long Press από το Tap

Long Press και Tap — δύο διαφορετικές χειρονομίες με διαφορετική σημασιολογία. Το Tap (αφή) — είναι μια ακαριάια πίεση: το δάχτυλο αγγίζει την οθόνη και απελευθερώνεται μέσα σε 100–300 ms. Το Tap είναι πάντα η κύρια ενέργεια (primary action): άνοιγμα εφαρμογής, πάτημα κουμπιού, μετάβαση σε σύνδεσμο. Long Press — δευτερεύουσα ενέργεια (secondary action): άνοιγμα αναδυόμενου μενού, έναρξη επεξεργασίας, εμφάνιση επιπλέον πληροφοριών.

ΠαράμετροςTapLong Press
Χρόνος κρατήματος100–300 ms500–1000 ms
Τύπος ενέργειαςΚύρια (primary)Δευτερεύουσα (secondary)
ΠαραδείγματαΆνοιγμα συνδέσμου, πάτημα κουμπιούΑναδυόμενο μενού, επεξεργασία
ΑνατροφοδότησηΟπτική (highlight)Απτική (Haptic Feedback)
iOS APIUITapGestureRecognizerUILongPressGestureRecognizer
Android APIsetOnClickListenersetOnLongClickListener

Βασικός κανόνας: μην χρησιμοποιείτε ποτέ το Long Press ως τον μοναδικό τρόπο εκτέλεσης μιας ενέργειας. Οι χρήστες αναμένουν ότι το Tap εκτελεί την κύρια ενέργεια και το Long Press ανοίγει τις επιπλέον επιλογές. Η παραβίαση αυτής της αρχής (για παράδειγμα, απαίτηση παρατεταμένου πατήματος για το άνοιγμα ενός συνδέσμου) οδηγεί σε αρνητική εμπειρία χρήστη και μείωση της προσβασιμότητας.

Long Press σε iOS: UILongPressGestureRecognizer

UILongPressGestureRecognizer — ο τυπικός ανιχνευτής χειρονομίας στο iOS SDK για το χειρισμό παρατεταμένου πατήματος. Κληρονομεί από το UIGestureRecognizer και υποστηρίζει ρύθμιση ελάχιστης διάρκειας, επιτρεπόμενης μετακίνησης δαχτύλου και αριθμού αφών. Ο ανιχνευτής μεταβαίνει στην κατάσταση UIGestureRecognizerStateBegan μετά τον χρονοδιακόπτη, στη συνέχεια σε UIGestureRecognizerStateChanged κατά την κίνηση του δαχτύλου και UIGestureRecognizerStateEnded κατά την απελευθέρωση.

swift
// UILongPressGestureRecognizer με ρύθμιση ελάχιστης διάρκειας
class ContextMenuViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let longPressRecognizer = UILongPressGestureRecognizer(
            target: self,
            action: #selector(handleLongPress(_:))
        )

        // Ελάχιστος χρόνος κρατήματος: 0.5 δευτερόλεπτο
        longPressRecognizer.minimumPressDuration = 0.5

        // Επιτρεπόμενη μετακίνηση δαχτύλου: 10 σημεία
        longPressRecognizer.allowableMovement = 10

        customView.addGestureRecognizer(longPressRecognizer)
    }

    @objc func handleLongPress(_ recognizer: UILongPressGestureRecognizer) {
        guard recognizer.state == .began else { return }

        // Δημιουργία αναδυόμενου μενού
        let location = recognizer.location(in: self.view)
        ContextMenuPresenter.show(at: location)
    }
}

Παράμετροι ρύθμισης: minimumPressDuration — χρόνος σε δευτερόλεπτα μέχρι την ενεργοποίηση (προκαθορισμένο 0.5, για προσβασιμότητα συνιστάται 0.65+); allowableMovement — μέγιστη μετατόπιση δαχτύλου σε σημεία (προκαθορισμένο 10, η αύξηση βοηθά σε περίπτωση τρόμου). Το iOS υποστηρίζει numberOfTouchesRequired για χειρονομίες πολλαπλών αφών (για παράδειγμα, παρατεταμένο πάτημα με δύο δάχτυλα). Ο ανιχνευτής ενσωματώνεται επίσης με το UIContextMenuInteraction — όταν προστίθεται context menu σε UIView μέσω UIContextMenuConfiguration, το Long Press καλεί αυτόματα το αναδυόμενο μενού χωρίς χειροκίνητη υλοποίηση της χειρονομίας.

Long Press σε Android: setOnLongClickListener

setOnLongClickListener — η μέθοδος View στο Android SDK που ορίζει τον ακροατή παρατεταμένου πατήματος. Όταν ο χρήστης κρατά το View για περισσότερο από 500 ms, το σύστημα καλεί την onLongClick(). Η μέθοδος επιστρέφει boolean — true σημαίνει ότι το συμβάν έχει υποβληθεί και δεν πρέπει να μεταδοθεί περαιτέρω, false — το συμβάν μπορεί να επεξεργαστεί και από άλλους ακροατές. Για πιο σύνθετη επεξεργασία (κίνηση δαχτύλου μετά την έναρξη του Long Press) χρησιμοποιείται ο GestureDetector με OnGestureListener.

kotlin
// Παράδειγμα setOnLongClickListener με απτική ανατροφοδότηση
val itemView: View = findViewById(R.id.itemView)

itemView.setOnLongClickListener {
    // Απτική απόκριση για επιβεβαίωση έναρξης χειρονομίας
    it.performHapticFeedback(
        HapticFeedbackConstants.LONG_PRESS
    )

    // Εμφάνιση αναδυόμενου μενού στη θέση του στοιχείου
    val popup = PopupMenu(this, it)
    popup.menuInflater.inflate(R.menu.context_menu, popup.menu)
    popup.show()

    true // Το συμβάν επεξεργάστηκε
}

GestureDetector παρέχει πιο λεπτό έλεγχο επί της χειρονομίας. Σε αντίθεση με το setOnLongClickListener, ο GestureDetector ειδοποιεί για έναρξη (onLongPress), κίνηση (onScroll) και απελευθέρωση. Αυτό επιτρέπει την υλοποίηση σύνθετων σεναρίων — για παράδειγμα, έναρξη σύρσιμου μετά από παρατεταμένο πάτημα (Drag-and-Drop). Ο OnGestureListener απαιτεί την υλοποίηση έξι μεθόδων: onDown, onShowPress, onSingleTapUp, onScroll, onLongPress, onFling.

Που εφαρμόζεται το παρατεταμένο πάτημα

Long Press χρησιμοποιείται σε δεκάδες σενάρια κινητών διεπαφών. Η πιο συχνή χρήση είναι το αναδυόμενο μενού: παρατεταμένο πάτημα σε μια επαφή εμφανίζει επιλογές επικοινωνίας (κλήση, μήνυμα, email), σε ένα αρχείο — επιλογές (αντιγραφή, μετακίνηση, διαγραφή), σε κείμενο — επιλογή και πρόχειρο. Ο Android Launcher χρησιμοποιεί παρατεταμένο πάτημα σε εικονίδιο για μετακίνηση εφαρμογών και προσθήκη widget.

Επιλογή κειμένου — ένα κλασικό παράδειγμα Long Press και στις δύο πλατφόρμες. Σε iOS, το παρατεταμένο πάτημα σε κείμενο ενεργοποιεί τον μεγεθυντικό φακό για τοποθέτηση δείκτη· σε μια λέξη — την επιλέγει με δείκτες. Σε Android, το παρατεταμένο πάτημα επιλέγει ολόκληρη τη λέξη και εμφανίζει τον πίνακα ενεργειών (αντιγραφή, αποκοπή, επικόλληση). Και οι δύο πλατφόρμες χρησιμοποιούν σύρσιμο των δεικτών για επέκταση της επιλογής.

Προεπισκόπηση — σε iOS, το παρατεταμένο πάτημα σε έναν σύνδεσμο στο Safari ή ένα μήνυμα στο Mail ανοίγει προεπισκόπηση περιεχομένου (peek). Σε Android, παρόμοια συμπεριφορά υλοποιείται μέσω Long Press σε ειδοποίηση (επεκτείνει την ειδοποίηση με κουμπιά ενεργειών). Οι εφαρμογές Photos χρησιμοποιούν παρατεταμένο πάτημα σε μικρογραφία για γρήγορη προεπισκόπηση εικόνας.

Drag-and-Drop συχνά εκκινείται από Long Press. Ο χρήστης κρατά το στοιχείο, το σύστημα μεταβαίνει σε λειτουργία σύρσιμου, και η κίνηση του δαχτύλου μετακινεί το στοιχείο στην οθόνη. Το Android υποστηρίζει αυτό το σενάριο μέσω View.startDragAndDrop() μετά από Long Press. Το iOS χρησιμοποιεί το UIDragInteraction, όπου η drag αλληλεπίδραση απαιτεί παρατεταμένο πάτημα για να ξεκινήσει το σύρσιμο.

Συστάσεις για τη χρήση του Long Press

Human Interface Guidelines και για τις δύο πλατφόρμες δίνουν σαφείς συστάσεις: το Long Press πρέπει να είναι πάντοτε δευτερεύουσα ενέργεια. Μην κάνετε ποτέ το παρατεταμένο πάτημα τον μοναδικό τρόπο εκτέλεσης μιας κρίσιμης λειτουργίας. Οι χρήστες δοκιμάζουν πρώτα το Tap — αν το Tap δεν λειτουργεί όπως αναμένουν, απογοητεύονται. Προσθέστε οπτικές ενδείξεις: τα αναδυόμενα μενού μπορούν να επισημαίνονται με εικονίδιο τριών τελειών, και τα στοιχεία που υποστηρίζουν Long Press — με οπτική υπόδειξη κατά την αφή.

Η απτική ανατροφοδότηση είναι υποχρεωτική για το Long Press. Όταν η χειρονομία αναγνωριστεί, η συσκευή πρέπει να το επιβεβαιώσει με απτική απόκριση: σε iOS αυτό είναι το UIImpactFeedbackGenerator με ελαφρό παλμό, σε Android — HapticFeedbackConstants.LONG_PRESS. Χωρίς απτική ανατροφοδότηση, ο χρήστης δεν είναι σίγουρος ότι η χειρονομία λειτούργησε και μπορεί να πατήσει ξανά, προκαλώντας ανεπιθύμητες ενέργειες.

ΣύστασηiOSAndroid
Timeout αναγνώρισης0.5–0.65 δευτερόλεπτα500 ms (προκαθορισμένο)
Απτική ανατροφοδότησηUIImpactFeedbackGeneratorHapticFeedbackConstants.LONG_PRESS
Οπτική ανατροφοδότησηΑναδυόμενο μενού, επισήμανσηPopupMenu, ripple animation
Προσβασιμότητα (Accessibility)VoiceOver + Custom ActionsTalkBack + AccessibilityNodeInfo
Μέγιστη μετακίνηση δαχτύλουallowableMovement = 10 ptTouchSlop (προκαθορισμένο ~8 dp)
Σύγκρουση με κύλισηcancelsTouchesInView = delayedonInterceptTouchEvent + LongPress

Προσβασιμότητα: δεν μπορούν όλοι οι χρήστες να εκτελέσουν παρατεταμένο πάτημα (άτομα με κινητικές δυσλειτουργίες, ηλικιωμένοι χρήστες). Πάντοτε παρέχετε εναλλακτικό τρόπο πρόσβασης σε ενέργειες Long Press — για παράδειγμα, μέσω ενός κουμπιού «Περισσότερα» στο πρόγραμμα ή μέσω λειτουργιών προσβασιμότητας του συστήματος (VoiceOver σε iOS, TalkBack σε Android). Για iOS, μπορούν να προστεθούν Custom Actions στο UIAccessibilityCustomAction που είναι διαθέσιμα μέσω του προγράμματος αναπαραγωγής VoiceOver.

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

Ποιος είναι ο τυπικός χρόνος κρατήματος για το Long Press;

Ο τυπικός χρόνος για Long Press είναι 0,5 δευτερόλεπτο (500 ms) και στις δύο πλατφόρμες. Το iOS επιτρέπει ρύθμιση του minimumPressDuration από 0.3 έως 1.0 δευτερόλεπτο. Το Android χρησιμοποιεί σταθερό timeout 500 ms για το View.setOnLongClickListener. Για χρήστες με περιορισμένη κινητικότητα, συνιστάται η αύξηση του timeout σε 0,8–1,0 δευτερόλεπτα.

Ποια είναι η διαφορά μεταξύ Long Press και 3D Touch;

Long Press αναγνωρίζεται από τον χρόνο κρατήματος (0,5 δευτ.), 3D Touch — από τη δύναμη πίεσης (γραμμάρια πίεσης). Το 3D Touch είναι διαθέσιμο μόνο σε iPhone 6S–XR (υλική τεχνολογία Force Touch). Από το iOS 13, η Apple αντικατέστησε το 3D Touch με το Haptic Touch — μια προσομοίωση λογισμικού που λειτουργεί μέσω Long Press με απτική ανατροφοδότηση. Το Haptic Touch είναι διαθέσιμο σε όλα τα σύγχρονα iPhone και iPad.

Πώς μπορώ να αποφύγω τη σύγκρουση Long Press με κύλιση (ScrollView);

Η σύγκρουση Long Press και κύλισης είναι συνηθισμένο πρόβλημα. Λύση: ορίστε delaysTouchesBegan = true για τον ανιχνευτή χειρονομίας σε iOS (το σύστημα δεν στέλνει το touchesBegan αμέσως, αλλά περιμένει την αναγνώριση της χειρονομίας). Σε Android, χρησιμοποιήστε το onInterceptTouchEvent που επιστρέφει false για Long Press. Εάν ο χρήστης αρχίσει να κουνάει το δάχτυλο πριν από το timeout — η χειρονομία ακυρώνεται υπέρ της κύλισης.

Μπορώ να χρησιμοποιήσω Long Press για εφαρμογές ιστού (PWA);

Ναι, το Long Press υποστηρίζεται σε εφαρμογές ιστού μέσω του συμβάντος touchstart/touchend με μέτρηση χρόνου. Τα σύγχρονα προγράμματα περιήγησης υποστηρίζουν επίσης το συμβάν contextmenu που ενεργοποιείται σε παρατεταμένο πάτημα σε κινητές συσκευές. Για συμβατότητα μεταξύ προγραμμάτων περιήγησης, χρησιμοποιήστε βιβλιοθήκες όπως hammer.js ή υλοποιήστε έναν προσαρμοσμένο ανιχνευτή μέσω setInterval στο χειριστή touchstart.

Πώς μπορώ να προσθέσω απτική ανατροφοδότηση στο Long Press σε iOS;

Σε iOS, η απτική ανατροφοδότηση προστίθεται μέσω UIImpactFeedbackGenerator. Καλέστε την impactOccurred() τη στιγμή που το UILongPressGestureRecognizer μεταβαίνει στην κατάσταση began. Για ελαφρά απόκριση, χρησιμοποιήστε UIImpactFeedbackGenerator(style: .light). Για πιο αισθητή — .medium. Για αναδυόμενα μενού, το iOS προσθέτει αυτόματα απτική ανατροφοδότηση μέσω UIContextMenuInteraction χωρίς επιπλέον κώδικα.

Περίληψη

  • Long Press — χειρονομία κρατήματος δαχτύλου στην οθόνη για 0,5–1 δευτερόλεπτο για κλήση δευτερευουσών ενεργειών
  • Διαφορά από Tap — το Tap εκτελείται αμέσως (primary action), το Long Press απαιτεί timeout (secondary action)
  • iOS API — UILongPressGestureRecognizer με παραμέτρους minimumPressDuration και allowableMovement
  • Android API — View.setOnLongClickListener και GestureDetector.OnGestureListener
  • Εφαρμογή — αναδυόμενα μενού, επιλογή κειμένου, προεπισκόπηση, έναρξη Drag-and-Drop
  • Απτική ανατροφοδότηση — υποχρεωτική για επιβεβαίωση αναγνώρισης της χειρονομίας στον χρήστη
  • Προσβασιμότητα — πάντοτε παρέχετε εναλλακτική πρόσβαση σε ενέργειες Long Press

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

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

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

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