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 для обробки довгого натискання з колбеками стану
  • setOnLongClickListener — метод Android View, що викликає слухач при довгому натисканні
  • Multi-state — Long Press проходить через стани began, changed, ended, cancelled в iOS

Що таке Long Press?

Long Press (довге натискання, довгий дотик) — це жест мультитач-інтерфейсу, при якому користувач торкається екрану та утримує палець нерухомо протягом заданого часу. Система не реагує миттєво: вона очікує тайм-аут (зазвичай 500 мс), і тільки після його завершення розпізнає жест як 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 мс. Tap завжди є основною дією: відкрити додаток, натиснути кнопку, перейти за посиланням. Long Press — вторинна дія: відкрити контекстне меню, почати редагування, показати додаткову інформацію.

ПараметрTapLong Press
Час утримання100–300 мс500–1000 мс
Тип діїОсновна (primary)Вторинна (secondary)
ПрикладиВідкриття посилання, натискання кнопкиКонтекстне меню, редагування
Зворотний зв'язокВізуальний (підсвічування)Тактильний (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, для accessibility рекомендується 0.65+); allowableMovement — максимальне зміщення пальця в точках (стандартно 10, збільшення допомагає при тремтінні). iOS підтримує numberOfTouchesRequired для мультитач-жестів (наприклад, довге натискання двома пальцями). Розпізнавач також інтегрується з UIContextMenuInteraction — при додаванні контекстного меню до UIView через UIContextMenuConfiguration, Long Press автоматично викликає контекстне меню без ручної реалізації жесту.

Long Press в Android: setOnLongClickListener

setOnLongClickListener — метод View в Android SDK, який встановлює слухач довгого натискання. Коли користувач утримує View більше 500 мс, система викликає 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 використовує довге натискання на іконку для переміщення додатків та додавання віджетів.

Виділення тексту — класичний приклад 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 interaction вимагає довгого натискання для старту перетягування.

Рекомендації щодо використання Long Press

Інструкції з людського інтерфейсу обох платформ дають чіткі рекомендації: Long Press завжди має бути вторинною дією. Ніколи не робіть довге натискання єдиним способом виконання критичної функції. Користувачі спочатку пробують Tap — якщо Tap не спрацьовує очікуваним чином, вони розчаровуються. Додавайте візуальні підказки: контекстні меню можуть бути позначені іконкою трьох крапок, а елементи, що підтримують Long Press, — візуальним натяком при дотику.

Тактильний зворотний зв'язок обов'язковий для Long Press. Коли жест розпізнано, пристрій має підтвердити це тактильним відкликом: в iOS це UIImpactFeedbackGenerator з легким імпульсом, в Android — HapticFeedbackConstants.LONG_PRESS. Без тактильного зворотного зв'язку користувач не впевнений, що жест спрацював, і може повторно натиснути, викликаючи небажані дії.

РекомендаціяiOSAndroid
Тайм-аут розпізнавання0.5–0.65 секунди500 мс (за замовчуванням)
Тактильний відкликUIImpactFeedbackGeneratorHapticFeedbackConstants.LONG_PRESS
Візуальний фідбекКонтекстне меню, виділенняPopupMenu, ripple анімація
Доступність (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 мс) на обох платформах. iOS дозволяє налаштувати minimumPressDuration від 0.3 до 1.0 секунди. Android використовує фіксований тайм-аут 500 мс для View.setOnLongClickListener. Для користувачів з обмеженою моторикою рекомендується збільшити тайм-аут до 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. Якщо користувач починає рух пальця до тайм-ауту — жест скасовується на користь прокрутки.

Чи можна використовувати 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 виконується миттєво (основна дія), Long Press вимагає тайм-ауту (вторинна дія)
  • iOS API — UILongPressGestureRecognizer з параметрами minimumPressDuration та allowableMovement
  • Android API — View.setOnLongClickListener та GestureDetector.OnGestureListener
  • Застосування — контекстні меню, виділення тексту, попередній перегляд, ініціалізація Drag-and-Drop
  • Тактильний відклик — обов'язковий для підтвердження розпізнавання жесту користувачеві
  • Доступність — завжди надавайте альтернативний доступ до дій Long Press

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також