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 мс) для активації тих самих дій. Тактильний відгук імітує відчуття "кліку", хоча жодного фізичного натискання не відбувається. 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 також виконує динамічне калібрування: при першому натисканні після завантаження система запитує максимальну силу користувача та підлаштовує чутливість. Датчики мають точність ±10 грамів, діапазон — від 0 до 500+ грамів. Розробник може отримати значення сили через 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). Після відпускання значення сили обнуляється. Максимальне значення сили варіюється між пристроями: iPhone 6S — 6.6666, iPhone 7/X — до 20.0 (через інше калібрування). Не використовуйте силу для критичних дій — користувач може не знати, з якою силою натискати. Завжди надавайте альтернативу через Haptic Touch (Long Press).
Peek and Pop — оригінальний UX-патерн Apple, представлений з 3D Touch в iPhone 6S. Peek — легке натискання (сила ~0.5–1.0), яке показує попередній перегляд вмісту (email, посилання, фото) у вигляді картки-прев'ю. Pop — більш глибоке натискання (сила ~2.0+), яке відкриває контент на повний екран. Peek підтримував дії знизу (поділитися, копіювати, відповісти), доступні свайпом вгору на картці попереднього перегляду.
Реалізація Peek and Pop в UIKit включала три компоненти: UIViewControllerPreviewingDelegate (протокол з методами previewingContext(_:viewControllerForLocation:) та previewingContext(_:commit:)), UIPreviewAction (дії знизу) та реєстрація через registerForPreviewing(with:sourceView:). Розробник вказував, який ViewController показувати при Peek, та як відкривати його при Pop. Система автоматично додавала анімацію паралаксу та розмиття фону.
| Жест | Сила (норм.) | Дія | Візуальний ефект |
|---|---|---|---|
| Дотик (Touch) | 0.0–0.3 | Звичайна взаємодія | Підсвічування елемента |
| Легке натискання (Peek) | 0.5–1.0 | Попередній перегляд | Картка з розмиттям фону |
| Глибоке натискання (Pop) | 2.0+ | Відкриття на повний екран | Анімація розкриття картки |
| Свайп вгору | — | Дії (поділитися, копіювати) | Група UIPreviewAction |
Перехід до UIContextMenuInteraction (iOS 13): Apple замінила Peek and Pop на контекстні меню через UIContextMenuInteraction. Новий API простіший: не вимагає UIViewControllerPreviewingDelegate, підтримує ієрархічні меню (підменю), іконки SF Symbols та працює однаково з 3D Touch і Haptic Touch. Міграція: registerForPreviewing застарілий з 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, контекстне меню показується без попереднього перегляду. Для налаштування розміру та зовнішнього вигляду попереднього перегляду використовується UIContextMenuContentPreviewProvider. Контекстні меню автоматично отримують тактильний відгук (Haptic Touch Engine) та анімацію появи (масштаб + згасання).
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 активує трекпад довгим натисканням на пробіл. Режим трекпада став одним із найпопулярніших застосувань 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 мс проти 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.