3D Touch — sprzętowa technologia Apple, która rozpoznaje siłę nacisku na wyświetlacz iPhone'a, i jej programowa zastępcza Haptic Touch, działająca na podstawie czasu dotyku. 3D Touch wykorzystuje skalibrowane czujniki ciśnienia umieszczone pod matrycą ekranu (Force Touch) i pozwala rozróżnić lekki nacisk (peek) od głębokiego (pop). Od iOS 13 Apple zastąpiło 3D Touch technologią Haptic Touch, która symuluje mocny nacisk za pomocą Long Press z dotykowym sprzężeniem zwrotnym UIContextMenuInteraction.
Najważniejsze
3D Touch — sprzętowa technologia wejścia, zadebiutowana w iPhone 6S (2015). Pod powierzchnią wyświetlacza znajdują się czujniki pojemnościowe mierzące odległość między szkłem a podświetleniem. Przy naciśnięciu palcem szkło ugina się mikronowo, czujniki rejestrują wielkość odkształcenia i przekształcają ją na wartość siły (gramy). iOS rozróżnia trzy poziomy: lekki dotyk (touch), średni nacisk (peek, ~200 g) i głęboki nacisk (pop, ~400 g).
Haptic Touch — programowa zamiana 3D Touch, wprowadzona w iOS 13 (2019). Zamiast mierzenia ciśnienia Haptic Touch wykorzystuje Long Press (przytrzymanie palca ~500 ms) do aktywacji tych samych działań. Dotykowe sprzężenie zwrotne (haptic feedback) symuluje wrażenie "kliknięcia", mimo że nie dochodzi do żadnego fizycznego naciśnięcia. Apple przeszło na Haptic Touch ze względu na złożoność i kosztowność produkcji wyświetlaczy 3D Touch, szczególnie przy przejściu na panele OLED z Face ID.
Informacje historyczne: 3D Touch pojawił się w iPhone 6S i był utrzymywany do iPhone XS (2018). iPhone XR (2018) stał się pierwszym urządzeniem z Haptic Touch zamiast 3D Touch. Od iPhone 11 (2019) i iOS 13 wszystkie nowe iPhone'y używają Haptic Touch. iPad nigdy nie otrzymał 3D Touch — tylko Haptic Touch od iPadOS 13. Apple Watch wykorzystuje technologię Force Touch w wyświetlaczu (różni się od iPhone 3D Touch), która została usunięta od watchOS 7 i Series 6.
Force Touch — technologia pomiaru siły nacisku używana przez Apple w iPhone 6S–XS (3D Touch), gładzikach MacBook (2015+) i Apple Watch (Series 1–5). U podstaw leżą czujniki pojemnościowe rozmieszczone na obwodzie wyświetlacza. Przy naciśnięciu szkło odkształca się o mikrony, czujniki rejestrują zmianę odległości i obliczają siłę według krzywej kalibracyjnej. System uwzględnia temperaturę otoczenia (kalibracja co 24 godziny) i położenie palca (środek ekranu jest bardziej czuły).
Kalibracja — krytyczny aspekt 3D Touch. Każdy iPhone jest kalibrowany indywidualnie w fabryce. iOS wykonuje również dynamiczną kalibrację: przy pierwszym naciśnięciu po uruchomieniu system prosi użytkownika o maksymalną siłę i dostosowuje czułość. Czujniki mają dokładność ±10 gramów, zakres — od 0 do 500+ gramów. Deweloper może uzyskać wartość force za pomocą UITouch.force (znormalizowane od 0.0 do maksymalnego) lub UITouch.maximumPossibleForce.
// Sprawdzanie dostępności 3D Touch i odczytywanie siły nacisku
class ForceTouchViewController: UIViewController {
override func touchesMoved(_ touches: Set<UITouch>,
with event: UIEvent?) {
guard let touch = touches.first else { return }
// Sprawdzanie obsługi Force Touch na urządzeniu
guard self.traitCollection.forceTouchCapability
== UIForceTouchCapability.available else {
// Urządzenie nie obsługuje 3D Touch
return
}
// Odczyt siły nacisku (0.0 — max)
let force = touch.force // 0.0 ... maximumPossibleForce
let maxForce = touch.maximumPossibleForce
// Normalizacja do zakresu 0.0–1.0 do wizualizacji
let normalizedForce = force / maxForce
// Wizualna reakcja na siłę nacisku (skalowanie elementu)
forceView.transform = CGAffineTransform(scaleX: 1.0 + normalizedForce * 0.3,
y: 1.0 + normalizedForce * 0.3)
}
}Ograniczenia: 3D Touch działa tylko z aktywnym dotykiem (UITouch.phase == .began lub .moved). Po puszczeniu wartość force jest zerowana. Maksymalna wartość force różni się między urządzeniami: iPhone 6S — 6.6666, iPhone 7/X — do 20.0 (z powodu innej kalibracji). Nie używaj force do krytycznych działań — użytkownik może nie wiedzieć, z jaką siłą naciskać. Zawsze zapewniaj alternatywę przez Haptic Touch (Long Press).
Peek and Pop — oryginalny wzorzec UX Apple, wprowadzony z 3D Touch w iPhone 6S. Peek — lekki nacisk (force ~0.5–1.0), który pokazuje podgląd zawartości (e-mail, link, zdjęcie) w postaci karty-podglądu. Pop — głębszy nacisk (force ~2.0+), który otwiera treść na pełnym ekranie. Peek obsługiwał działania na dole (share, copy, reply), dostępne przez przesunięcie w górę na karcie podglądu.
Implementacja Peek and Pop w UIKit obejmowała trzy komponenty: UIViewControllerPreviewingDelegate (protokół z metodami previewingContext(_:viewControllerForLocation:) i previewingContext(_:commit:)), UIPreviewAction (działania na dole) i rejestrację przez registerForPreviewing(with:sourceView:). Deweloper określał, który ViewController pokazać przy Peek i jak go otworzyć przy Pop. System automatycznie dodawał animację paralaksy i rozmycia tła.
| Gest | Siła (norm.) | Działanie | Efekt wizualny |
|---|---|---|---|
| Dotyk (Touch) | 0.0–0.3 | Zwykła interakcja | Podświetlenie elementu |
| Lekki nacisk (Peek) | 0.5–1.0 | Podgląd zawartości | Karta z rozmyciem tła |
| Głęboki nacisk (Pop) | 2.0+ | Otwarcie na pełnym ekranie | Animacja rozwijania karty |
| Przesunięcie w górę | — | Działania (share, copy) | Grupa UIPreviewAction |
Przejście na UIContextMenuInteraction (iOS 13): Apple zastąpiło Peek and Pop menu kontekstowymi przez UIContextMenuInteraction. Nowe API jest prostsze: nie wymaga UIViewControllerPreviewingDelegate, obsługuje menu hierarchiczne (submenus), ikony SF Symbols i działa tak samo z 3D Touch i Haptic Touch. Migracja: registerForPreviewing jest przestarzałe od iOS 13. Zastąp je UIContextMenuConfiguration, które automatycznie dostosowuje się do możliwości urządzenia.
UIContextMenuInteraction — nowoczesne API iOS dla menu kontekstowych, dostępne od iOS 13. Dodaje się je do dowolnego UIView przez addInteraction(_:). Delegat UIContextMenuInteractionDelegate dostarcza konfigurację menu: UIContextMenuConfiguration z identyfikatorem, previewProvider (opcjonalnie, dla podglądu) i actionProvider (tablica UIAction lub UIMenu). Menu kontekstowe aktywuje się przez 3D Touch (jeśli dostępny) lub Haptic Touch (Long Press na pozostałych urządzeniach).
// UIContextMenuInteraction z menu hierarchicznym
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: "Udostępnij",
image: UIImage(systemName: "square.and.arrow.up"),
handler: { _ in self.shareContent() })
let edit = UIAction(title: "Edytuj",
image: UIImage(systemName: "pencil"),
handler: { _ in self.editContent() })
let delete = UIAction(title: "Usuń",
image: UIImage(systemName: "trash"),
attributes: .destructive,
handler: { _ in self.deleteContent() })
return UIMenu(title: "Akcje", children: [share, edit, delete])
}
}
}UIContextMenuConfiguration obsługuje previewProvider — kontroler wyświetlany jako podgląd. Jeśli previewProvider ma wartość nil, menu kontekstowe jest pokazywane bez podglądu. Do dostosowania rozmiaru i wyglądu podglądu używany jest UIContextMenuContentPreviewProvider. Menu kontekstowe automatycznie otrzymuje dotykowe sprzężenie zwrotne (Haptic Touch Engine) i animację pojawiania się (scale + fade).
Haptic Touch i 3D Touch — różne technologie prowadzące do tego samego rezultatu. 3D Touch jest sprzętowa (czujniki ciśnienia w wyświetlaczu), Haptic Touch jest programowa (Long Press + Taptic Engine do dotykowej symulacji). 3D Touch wymaga kosztów produkcji (dodatkowa warstwa czujników), zwiększa grubość ekranu i złożoność napraw. Haptic Touch jest tańszy, prostszy w produkcji i dostępny na wszystkich nowoczesnych urządzeniach (iPhone SE 2020, iPhone 11–16, iPad, iPod touch).
| Parametr | 3D Touch | Haptic Touch |
|---|---|---|
| Zasada | Pomiar ciśnienia (gramy) | Pomiar czasu (milisekundy) |
| Dostępność | iPhone 6S–XS (ograniczona) | iPhone XR+, iPad, iPod touch |
| Szybkość | Natychmiast (~100 ms) | Z opóźnieniem (~500 ms) |
| Poziomy nacisku | 2 (peek + pop) | 1 (menu kontekstowe) |
| Sprzężenie dotykowe | Taptic Engine (symulacja kliknięcia) | Taptic Engine (symulacja kliknięcia) |
| App Store | Quick Actions na ikonie | Quick Actions na ikonie |
| Kalibracja | Automatyczna do siły użytkownika | Niewymagana |
| Naprawialność | Skomplikowana (czujniki w wyświetlaczu) | Standardowa |
Wpływ na UX: szybkość 3D Touch jest wyższa — użytkownik otrzymuje menu kontekstowe natychmiast przy mocnym naciśnięciu. Haptic Touch wymaga pauzy 500 ms, co jest odczuwalne jako wolniejsze. Apple kompensuje to jednak dotykowym sprzężeniem zwrotnym i animacją wizualną. Użytkownicy przechodzący z 3D Touch na Haptic Touch często zauważają różnicę w szybkości. Dla deweloperów migracja jest przejrzysta: UIContextMenuInteraction działa tak samo na obu technologiach.
Quick Actions — menu kontekstowe na ikonie aplikacji na ekranie głównym. Mocny nacisk (3D Touch) lub Long Press (Haptic Touch) na ikonie pokazuje do 4 szybkich działań: "Nowa wiadomość" (Messages), "Zrób zdjęcie" (Camera), "Szukaj" (Safari). Implementuje się przez Info.plist klucz UIApplicationShortcutItems lub przez delegat UIApplicationShortcutItem. Quick Actions są dostępne na wszystkich urządzeniach z iOS 13+ (Haptic Touch) lub 3D Touch.
Klawiatura-trackpad — mocny nacisk na klawiaturę iOS przełącza ją w tryb trackpada: klawisze stają się nieaktywne, a ruch palca przesuwa kursor. 3D Touch aktywował trackpad mocnym naciśnięciem w dowolnym miejscu klawiatury. Haptic Touch aktywuje trackpad długim naciśnięciem na spację (spacebar). Tryb trackpada stał się jednym z najpopularniejszych zastosowań 3D Touch — użytkownicy cenią precyzyjne pozycjonowanie kursora podczas edycji tekstu.
Podgląd linków i zdjęć — mocny nacisk na link w Safari pokazuje podgląd strony (peek) bez przechodzenia. Analogicznie: nacisk na zdjęcie w Messages otwiera powiększoną wersję. Przesunięcie w górę w trybie peek pokazuje działania: "Otwórz", "Dodaj do listy czytelniczej", "Kopiuj". Wszystkie te scenariusze działają przez UIContextMenuInteraction w nowoczesnych wersjach iOS.
Rysowanie i aplikacje kreatywne — w Procreate, Photoshop i innych aplikacjach do rysowania siła nacisku 3D Touch steruje grubością pędzla, nieprzezroczystością lub nasyceniem koloru. Aplikacje odczytują UITouch.force (0.0–1.0) i przekształcają w parametry narzędzia. Jednak do rysowania Apple Pencil na iPadzie zapewnia dokładniejszą kontrolę nacisku (z obsługą pochylenia i azymutu), dlatego 3D Touch w aplikacjach kreatywnych na iPhone jest mniej popularny.
Często zadawane pytania
3D Touch — technologia sprzętowa mierząca siłę nacisku przez czujniki pojemnościowe w wyświetlaczu (iPhone 6S–XS). Haptic Touch — programowa imitacja wykorzystująca Long Press (przytrzymanie) i dotykowe sprzężenie zwrotne Taptic Engine. 3D Touch jest szybszy (100 ms vs 500 ms) i obsługuje dwa poziomy siły (peek + pop). Haptic Touch jest dostępny na wszystkich urządzeniach z iOS 13+, w tym iPhone XR, wszystkich modelach iPhone 11–16, iPad i iPod touch.
W kodzie użyj traitCollection.forceTouchCapability. Wartość .available oznacza, że 3D Touch jest obsługiwany, .unavailable — nie, .unknown — jeszcze nie określono (poczekaj na traitCollectionDidChange). Na urządzeniach z Haptic Touch forceTouchCapability zwraca .unavailable, ponieważ Haptic Touch nie używa sprzętowych czujników siły. Dla użytkowników sprawdzenie: Ustawienia → Ogólne → Dostępność → 3D Touch (tylko na starszych iPhone).
Apple zastąpiło 3D Touch Haptic Touch z kilku powodów: wysoki koszt produkcji ekranów z czujnikami ciśnienia, złożoność napraw (czujniki zintegrowane z wyświetlaczem), ograniczona świadomość użytkowników (wielu nie znało funkcji) oraz przejście na ekrany OLED z Face ID, które są trudniejsze do kalibracji dla 3D Touch. Haptic Touch jest tańszy, prostszy i dostępny na większej liczbie urządzeń.
3D Touch obsługują: iPhone 6S, 6S Plus, 7, 7 Plus, 8, 8 Plus, X, XS, XS Max. iPhone XR nie ma 3D Touch (pierwszy z Haptic Touch). Wszystkie modele iPhone 11, 12, 13, 14, 15, 16 i SE (2. i 3. generacji) używają Haptic Touch. iPad nigdy nie miał 3D Touch. Na urządzeniach z 3D Touch dostępne są również ustawienia czułości (Ustawienia → Ogólne → Dostępność → 3D Touch).
Tak, iOS automatycznie emuluje 3D Touch przez Haptic Touch na urządzeniach bez wsparcia sprzętowego. API UIContextMenuInteraction działa tak samo na wszystkich urządzeniach — system sam wybiera wyzwalacz (3D Touch lub Long Press). Dla twojego kodu jest to przezroczyste: menu kontekstowe pojawia się na wszystkich urządzeniach z iOS 13+. Nie musisz pisać oddzielnej logiki dla 3D Touch i Haptic Touch — używaj UIContextMenuConfiguration.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również