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 g) и дълбок натиск (pop, ~400 g).
Haptic Touch — софтуерен заместител на 3D Touch, представен в iOS 13 (2019). Вместо да измерва налягане, Haptic Touch използва Long Press (задържане на пръста ~500 ms) за активиране на същите действия. Тактилната обратна връзка (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 също извършва динамично калибриране: при първия натиск след стартиране системата пита за максималната сила на потребителя и настройва чувствителността. Сензорите имат точност ±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 — макс)
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), който показва преглед на съдържанието (имейл, връзка, снимка) под формата на карта за преглед. 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 | Обикновено взаимодействие | Открояване на елемент |
| Лек натиск (Peek) | 0.5–1.0 | Преглед на съдържание | Карта със замъгляване на фона |
| Дълбок натиск (Pop) | 2.0+ | Отваряне на цял екран | Анимация на разгъване на карта |
| Плъзгане нагоре | — | Действия (share, copy) | Група UIPreviewAction |
Преход към UIContextMenuInteraction (iOS 13): Apple замени Peek and Pop с контекстни менюта чрез UIContextMenuInteraction. Новото API е по-просто: не изисква UIViewControllerPreviewingDelegate, поддържа йерархични менюта (подменюта), икони SF Symbols и работи еднакво с 3D Touch и Haptic Touch. Миграция: registerForPreviewing е остаряло от iOS 13. Заменете го с UIContextMenuConfiguration, което автоматично се адаптира към възможностите на устройството.
UIContextMenuInteraction — модерен iOS API за контекстни менюта, достъпен от 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) и анимация на появяване (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 ms) | Със закъснение (~500 ms) |
| Нива на натиск | 2 (peek + pop) | 1 (контекстно меню) |
| Тактилна обратна връзка | Taptic Engine (симулация на клик) | Taptic Engine (симулация на клик) |
| App Store | Quick Actions на икона | Quick Actions на икона |
| Калибриране | Автоматично към силата на потребителя | Не се изисква |
| Ремонтопригодност | Сложна (сензори в дисплея) | Стандартна |
Влияние върху UX: скоростта на 3D Touch е по-висока — потребителят получава контекстно меню веднага при силен натиск. Haptic Touch изисква пауза от 500 ms, което се усеща като по-бавно. 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 ms vs 500 ms) и поддържа две нива на сила (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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също