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. Human Interface Guidelines обеих платформ описывают Long Press как вторичное действие — не замену Tap, а расширение функциональности.

Чем Long Press отличается от Tap

Long Press и Tap — два разных жеста с разной семантикой. Tap (касание) — это мгновенное нажатие: палец касается экрана и отпускается за 100–300 мс. Tap всегда является основным действием (primary action): открыть приложение, нажать кнопку, перейти по ссылке. Long Press — вторичное действие (secondary action): открыть контекстное меню, начать редактирование, показать дополнительную информацию.

ПараметрTapLong Press
Время удержания100–300 мс500–1000 мс
Тип действияОсновное (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, для accessibility рекомендуется 0.65+); allowableMovement — максимальное смещение пальца в точках (стандартно 10, увеличение помогает при тряске). iOS поддерживает numberOfTouchesRequired для мультитач-жестов (например, долгое нажатие двумя пальцами). Распознаватель также интегрируется с UIContextMenuInteraction — при добавлении context menu к 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

Human Interface Guidelines обеих платформ дают чёткие рекомендации: 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 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 мс) на обеих платформах. 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 выполняется мгновенно (primary action), Long Press требует таймаута (secondary action)
  • iOS API — UILongPressGestureRecognizer с параметрами minimumPressDuration и allowableMovement
  • Android API — View.setOnLongClickListener и GestureDetector.OnGestureListener
  • Применение — контекстные меню, выделение текста, предпросмотр, инициализация Drag-and-Drop
  • Тактильный отклик — обязателен для подтверждения распознавания жеста пользователю
  • Доступность — всегда предоставляйте альтернативный доступ к действиям Long Press

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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