3D Touch — аппаратная технология Apple, распознающая силу нажатия на дисплей iPhone, и её программная замена Haptic Touch, работающая через длительность касания. 3D Touch использует калиброванные датчики давления, установленные под матрицей экрана (Force Touch), и позволяет различать лёгкое нажатие (peek) и глубокое (pop). Начиная с iOS 13, Apple заменила 3D Touch на Haptic Touch — технологию, имитирующую силовое нажатие через Long Press с тактильным откликом UIContextMenuInteraction.
Главное
3D Touch — аппаратная технология ввода, дебютировавшая в iPhone 6S (2015). Под поверхностью дисплея расположены ёмкостные датчики, измеряющие расстояние между стеклом и подсветкой. При нажатии пальцем стекло микронно прогибается, датчики фиксируют величину деформации и преобразуют её в значение силы (граммы). iOS различает три уровня: лёгкое касание (touch), среднее нажатие (peek, ~200 г) и глубокое нажатие (pop, ~400 г).
Haptic Touch — программная замена 3D Touch, представленная в iOS 13 (2019). Вместо измерения давления Haptic Touch использует Long Press (удержание пальца ~500 мс) для активации тех же действий. Тактильный отклик (haptic feedback) имитирует ощущение "клика", хотя никакого физического нажатия не происходит. Apple перешла на Haptic Touch из-за сложности и дороговизны производства 3D Touch-дисплеев, особенно при переходе на OLED-панели с Face ID.
Историческая справка: 3D Touch появился в iPhone 6S и сохранялся до iPhone XS (2018). iPhone XR (2018) стал первым устройством с Haptic Touch вместо 3D Touch. Начиная с iPhone 11 (2019) и iOS 13, все новые iPhone используют Haptic Touch. iPad никогда не получал 3D Touch — только Haptic Touch с iPadOS 13. Apple Watch использует технологию Force Touch в дисплее (отличается от iPhone 3D Touch), которая была удалена начиная с watchOS 7 и Series 6.
Force Touch — технология измерения силы нажатия, используемая Apple в iPhone 6S–XS (3D Touch), трекпадах MacBook (2015+) и Apple Watch (Series 1–5). В основе лежат ёмкостные датчики, расположенные по периметру дисплея. При нажатии стекло деформируется на микроны, датчики регистрируют изменение расстояния и вычисляют силу по калибровочной кривой. Система учитывает температуру окружающей среды (калибровка каждые 24 часа) и положение пальца (центр экрана более чувствителен).
Калибровка — критический аспект 3D Touch. Каждый iPhone калибруется на заводе индивидуально. iOS также выполняет динамическую калибровку: при первом нажатии после загрузки система запрашивает максимальную силу (force) пользователя и подстраивает чувствительность. Датчики имеют точность ±10 граммов, диапазон — от 0 до 500+ граммов. Разработчик может получить значение force через UITouch.force (нормализованное от 0.0 до максимального) или UITouch.maximumPossibleForce.
// Проверка доступности 3D Touch и чтение силы нажатия
class ForceTouchViewController: UIViewController {
override func touchesMoved(_ touches: Set<UITouch>,
with event: UIEvent?) {
guard let touch = touches.first else { return }
// Проверка поддержки Force Touch на устройстве
guard self.traitCollection.forceTouchCapability
== UIForceTouchCapability.available else {
// Устройство не поддерживает 3D Touch
return
}
// Чтение силы нажатия (0.0 — max)
let force = touch.force // 0.0 ... maximumPossibleForce
let maxForce = touch.maximumPossibleForce
// Нормализация в диапазон 0.0–1.0 для визуализации
let normalizedForce = force / maxForce
// Визуальная реакция на силу нажатия (масштаб элемента)
forceView.transform = CGAffineTransform(scaleX: 1.0 + normalizedForce * 0.3,
y: 1.0 + normalizedForce * 0.3)
}
}Ограничения: 3D Touch работает только с активным касанием (UITouch.phase == .began или .moved). После отпускания значение force обнуляется. Максимальное значение force варьируется между устройствами: iPhone 6S — 6.6666, iPhone 7/X — до 20.0 (из-за другой калибровки). Не используйте force для критических действий — пользователь может не знать, с какой силой нажимать. Всегда предоставляйте альтернативу через Haptic Touch (Long Press).
Peek and Pop — оригинальный UX-паттерн Apple, представленный с 3D Touch в iPhone 6S. Peek — лёгкое нажатие (force ~0.5–1.0), которое показывает предварительный просмотр содержимого (email, ссылка, фото) в виде карточки-превью. Pop — более глубокое нажатие (force ~2.0+), которое открывает контент на полный экран. Peek поддерживал действия снизу (share, copy, reply), доступные свайпом вверх на карточке предпросмотра.
Реализация Peek and Pop в UIKit включала три компонента: UIViewControllerPreviewingDelegate (протокол с методами previewingContext(_:viewControllerForLocation:) и previewingContext(_:commit:)), UIPreviewAction (действия снизу) и регистрация через registerForPreviewing(with:sourceView:). Разработчик указывал, какой ViewController показывать при Peek, и как открывать его при Pop. Система автоматически добавляла анимацию параллакса и размытия фона.
| Жест | Сила (норм.) | Действие | Визуальный эффект |
|---|---|---|---|
| Касание (Touch) | 0.0–0.3 | Обычное взаимодействие | Highlight элемента |
| Лёгкое нажатие (Peek) | 0.5–1.0 | Предпросмотр содержимого | Карточка с blur фона |
| Глубокое нажатие (Pop) | 2.0+ | Открытие на полный экран | Анимация раскрытия карточки |
| Свайп вверх | — | Действия (share, copy) | UIPreviewAction Group |
Переход к UIContextMenuInteraction (iOS 13): Apple заменила Peek and Pop на контекстные меню через UIContextMenuInteraction. Новый API проще: не требует UIViewControllerPreviewingDelegate, поддерживает иерархические меню (submenus), иконки SF Symbols, и работает одинаково с 3D Touch и Haptic Touch. Миграция: registerForPreviewing deprecated с iOS 13. Замените на UIContextMenuConfiguration, который автоматически адаптируется под возможности устройства.
UIContextMenuInteraction — современный API iOS для контекстных меню, доступный с iOS 13. Добавляется к любому UIView через addInteraction(_:). Делегат UIContextMenuInteractionDelegate предоставляет конфигурацию меню: UIContextMenuConfiguration с идентификатором, previewProvider (опционально, для предпросмотра) и actionProvider (массив UIAction или UIMenu). Контекстное меню активируется 3D Touch (если доступен) или Haptic Touch (Long Press на остальных устройствах).
// UIContextMenuInteraction с иерархическим меню
class ContextMenuViewController: UIViewController,
UIContextMenuInteractionDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let interaction = UIContextMenuInteraction(delegate: self)
contextMenuView.addInteraction(interaction)
}
func contextMenuInteraction(_ interaction: UIContextMenuInteraction,
configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
return UIContextMenuConfiguration(identifier: nil,
previewProvider: { PreviewViewController() }) { _ in
let share = UIAction(title: "Поделиться",
image: UIImage(systemName: "square.and.arrow.up"),
handler: { _ in self.shareContent() })
let edit = UIAction(title: "Редактировать",
image: UIImage(systemName: "pencil"),
handler: { _ in self.editContent() })
let delete = UIAction(title: "Удалить",
image: UIImage(systemName: "trash"),
attributes: .destructive,
handler: { _ in self.deleteContent() })
return UIMenu(title: "Действия", children: [share, edit, delete])
}
}
}UIContextMenuConfiguration поддерживает previewProvider — контроллер, отображаемый в качестве предпросмотра. Если previewProvider равен nil, контекстное меню показывается без предпросмотра. Для настройки размера и внешнего вида preview используется UIContextMenuContentPreviewProvider. Контекстные меню автоматически получают тактильный отклик (Haptic Touch Engine) и анимацию появления (scale + fade).
Haptic Touch и 3D Touch — разные технологии, ведущие к одному результату. 3D Touch — аппаратная (датчики давления в дисплее), Haptic Touch — программная (Long Press + Taptic Engine для тактильной имитации). 3D Touch требует производственных затрат (дополнительный слой датчиков), увеличивает толщину экрана и сложность ремонта. Haptic Touch дешевле, проще в производстве и доступна на всех современных устройствах (iPhone SE 2020, iPhone 11–16, iPad, iPod touch).
| Параметр | 3D Touch | Haptic Touch |
|---|---|---|
| Принцип | Измерение давления (граммы) | Измерение времени (миллисекунды) |
| Доступность | iPhone 6S–XS (ограниченный) | iPhone XR+, iPad, iPod touch |
| Скорость | Мгновенно (~100 мс) | С задержкой (~500 мс) |
| Уровни нажатия | 2 (peek + pop) | 1 (контекстное меню) |
| Тактильный отклик | Taptic Engine (имитация клика) | Taptic Engine (имитация клика) |
| App Store | Quick Actions на иконке | Quick Actions на иконке |
| Калибровка | Авто-калибровка под силу пользователя | Не требуется |
| Ремонтопригодность | Сложная (датчики в дисплее) | Стандартная |
Влияние на UX: скорость 3D Touch выше — пользователь получает контекстное меню сразу при сильном нажатии. Haptic Touch требует паузы 500 мс, что ощущается медленнее. Однако Apple компенсирует это тактильным откликом и визуальной анимацией. Пользователи, перешедшие с 3D Touch на Haptic Touch, часто отмечают разницу в скорости. Для разработчиков миграция прозрачна: UIContextMenuInteraction работает одинаково на обоих технологиях.
Quick Actions — контекстное меню на иконке приложения на домашнем экране. Сильное нажатие (3D Touch) или Long Press (Haptic Touch) на иконке показывает до 4 быстрых действий: "Новое сообщение" (Messages), "Сделать фото" (Camera), "Поиск" (Safari). Реализуется через Info.plist ключ UIApplicationShortcutItems или через делегат UIApplicationShortcutItem. Quick Actions доступны на всех устройствах с iOS 13+ (Haptic Touch) или 3D Touch.
Клавиатура-трекпад — силовое нажатие на клавиатуру iOS переключает её в режим трекпада: клавиши становятся неактивными, и движение пальца перемещает курсор. 3D Touch активировал трекпад сильным нажатием в любом месте клавиатуры. Haptic Touch активирует трекпад долгим нажатием на пробел (spacebar). Режим трекпада стал одним из самых популярных применений 3D Touch — пользователи ценят точное позиционирование курсора при редактировании текста.
Предпросмотр ссылок и фото — силовое нажатие на ссылку в Safari показывает предварительный просмотр страницы (peek) без перехода. Аналогично: нажатие на фото в Messages открывает увеличенную версию. Свайп вверх в режиме peek показывает действия: "Открыть", "Добавить в список чтения", "Скопировать". Все эти сценарии работают через UIContextMenuInteraction в современных версиях iOS.
Рисование и креативные приложения — в Procreate, Photoshop и других приложениях для рисования сила нажатия 3D Touch управляет толщиной кисти, непрозрачностью или насыщенностью цвета. Приложения читают UITouch.force (0.0–1.0) и преобразуют в параметры инструмента. Однако для рисования Apple Pencil на iPad обеспечивает более точное управление давлением (с поддержкой наклона и азимута), поэтому 3D Touch в креативных приложениях на iPhone менее востребован.
Часто задаваемые вопросы
3D Touch — аппаратная технология, измеряющая силу нажатия через ёмкостные датчики в дисплее (iPhone 6S–XS). Haptic Touch — программная имитация, использующая Long Press (удержание) и тактильный отклик Taptic Engine. 3D Touch быстрее (100 мс vs 500 мс) и поддерживает два уровня силы (peek + pop). Haptic Touch доступен на всех устройствах с iOS 13+, включая iPhone XR, все модели iPhone 11–16, iPad и iPod touch.
В коде используйте traitCollection.forceTouchCapability. Значение .available — 3D Touch поддерживается, .unavailable — нет, .unknown — ещё не определено (дождитесь traitCollectionDidChange). На устройствах с Haptic Touch forceTouchCapability возвращает .unavailable, так как Haptic Touch не использует аппаратные датчики силы. Для пользователей проверка: Настройки → Основные → Универсальный доступ → 3D Touch (только на старых iPhone).
Apple заменила 3D Touch на Haptic Touch по нескольким причинам: высокая стоимость производства экранов с датчиками давления, сложность ремонта (датчики интегрированы в дисплей), ограниченная осведомлённость пользователей (многие не знали о функции), и переход на OLED-экраны с Face ID, которые сложнее калибровать для 3D Touch. Haptic Touch дешевле, проще и доступна на большем количестве устройств.
3D Touch поддерживают: iPhone 6S, 6S Plus, 7, 7 Plus, 8, 8 Plus, X, XS, XS Max. iPhone XR не имеет 3D Touch (первый с Haptic Touch). Все модели iPhone 11, 12, 13, 14, 15, 16 и SE (2-го и 3-го поколения) используют Haptic Touch. iPad никогда не имел 3D Touch. На устройствах с 3D Touch также доступны настройки чувствительности (Настройки → Основные → Универсальный доступ → 3D Touch).
Да, iOS автоматически эмулирует 3D Touch через Haptic Touch на устройствах без аппаратной поддержки. API UIContextMenuInteraction работает одинаково на всех устройствах — система сама выбирает триггер (3D Touch или Long Press). Для вашего кода это прозрачно: контекстное меню появляется на всех устройствах с iOS 13+. Не нужно писать отдельную логику для 3D Touch и Haptic Touch — используйте UIContextMenuConfiguration.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также