3D Touch è una tecnologia hardware Apple che riconosce la forza di pressione sul display dell'iPhone, e la sua sostituzione software Haptic Touch, che funziona attraverso la durata del tocco. 3D Touch utilizza sensori di pressione calibrati installati sotto la matrice dello schermo (Force Touch) e permette di distinguere tra pressione leggera (peek) e pressione profonda (pop). A partire da iOS 13, Apple ha sostituito 3D Touch con Haptic Touch — una tecnologia che simula la pressione forzata attraverso Long Press con feedback tattile UIContextMenuInteraction.
Punti chiave
3D Touch è una tecnologia di input hardware che ha debuttato nell'iPhone 6S (2015). Sotto la superficie del display, sensori capacitivi misurano la distanza tra il vetro e la retroilluminazione. Quando si preme con il dito, il vetro si deforma microscopicamente, i sensori rilevano la quantità di deformazione e la convertono in un valore di forza (grammi). iOS distingue tre livelli: tocco leggero (touch), pressione media (peek, ~200 g) e pressione profonda (pop, ~400 g).
Haptic Touch è una sostituzione software di 3D Touch, introdotta in iOS 13 (2019). Invece di misurare la pressione, Haptic Touch utilizza Long Press (mantenere il dito ~500 ms) per attivare le stesse azioni. Il feedback tattile simula la sensazione di un "clic", sebbene non si verifichi alcuna pressione fisica. Apple è passata a Haptic Touch a causa della complessità e dell'alto costo di produzione dei display 3D Touch, specialmente nella transizione ai pannelli OLED con Face ID.
Contesto storico: 3D Touch è apparso sull'iPhone 6S ed è rimasto fino all'iPhone XS (2018). L'iPhone XR (2018) è stato il primo dispositivo con Haptic Touch invece di 3D Touch. A partire dall'iPhone 11 (2019) e iOS 13, tutti i nuovi iPhone utilizzano Haptic Touch. L'iPad non ha mai ricevuto 3D Touch — solo Haptic Touch con iPadOS 13. L'Apple Watch utilizza la tecnologia Force Touch nel display (diversa dal 3D Touch dell'iPhone), che è stata rimossa a partire da watchOS 7 e Series 6.
Force Touch è una tecnologia di misurazione della forza utilizzata da Apple in iPhone 6S–XS (3D Touch), trackpad MacBook (2015+) e Apple Watch (Series 1–5). Si basa su sensori capacitivi posizionati attorno al perimetro del display. Quando si preme, il vetro si deforma di micron, i sensori registrano il cambiamento di distanza e calcolano la forza utilizzando una curva di calibrazione. Il sistema tiene conto della temperatura ambiente (calibrazione ogni 24 ore) e della posizione del dito (il centro dello schermo è più sensibile).
Calibrazione è un aspetto critico di 3D Touch. Ogni iPhone viene calibrato individualmente in fabbrica. iOS esegue anche una calibrazione dinamica: alla prima pressione dopo l'avvio, il sistema chiede la forza massima dell'utente e regola la sensibilità. I sensori hanno una precisione di ±10 grammi, un intervallo da 0 a 500+ grammi. Lo sviluppatore può ottenere il valore della forza tramite UITouch.force (normalizzato da 0.0 al massimo) o UITouch.maximumPossibleForce.
// Verifica disponibilità 3D Touch e lettura forza di pressione
class ForceTouchViewController: UIViewController {
override func touchesMoved(_ touches: Set<UITouch>,
with event: UIEvent?) {
guard let touch = touches.first else { return }
// Verifica supporto Force Touch sul dispositivo
guard self.traitCollection.forceTouchCapability
== UIForceTouchCapability.available else {
// Il dispositivo non supporta 3D Touch
return
}
// Lettura forza di pressione (0.0 — max)
let force = touch.force // 0.0 ... maximumPossibleForce
let maxForce = touch.maximumPossibleForce
// Normalizzazione all'intervallo 0.0–1.0 per visualizzazione
let normalizedForce = force / maxForce
// Reazione visiva alla forza di pressione (scala elemento)
forceView.transform = CGAffineTransform(scaleX: 1.0 + normalizedForce * 0.3,
y: 1.0 + normalizedForce * 0.3)
}
}Limitazioni: 3D Touch funziona solo con tocco attivo (UITouch.phase == .began o .moved). Dopo il rilascio, il valore della forza si azzera. Il valore massimo della forza varia tra i dispositivi: iPhone 6S — 6.6666, iPhone 7/X — fino a 20.0 (a causa di diversa calibrazione). Non utilizzare la forza per azioni critiche — l'utente potrebbe non sapere con quanta forza premere. Fornisci sempre un'alternativa tramite Haptic Touch (Long Press).
Peek and Pop è il pattern UX originale di Apple introdotto con 3D Touch sull'iPhone 6S. Peek è una pressione leggera (forza ~0.5–1.0) che mostra un'anteprima del contenuto (email, link, foto) in una scheda di anteprima. Pop è una pressione più profonda (forza ~2.0+) che apre il contenuto a schermo intero. Peek supportava azioni in basso (condividi, copia, rispondi), accessibili scorrendo verso l'alto sulla scheda di anteprima.
Implementazione di Peek and Pop in UIKit includeva tre componenti: UIViewControllerPreviewingDelegate (un protocollo con i metodi previewingContext(_:viewControllerForLocation:) e previewingContext(_:commit:)), UIPreviewAction (azioni in basso) e registrazione tramite registerForPreviewing(with:sourceView:). Lo sviluppatore specificava quale ViewController mostrare in Peek e come aprirlo in Pop. Il sistema aggiungeva automaticamente animazione parallasse e sfocatura dello sfondo.
| Gesto | Forza (norm.) | Azione | Effetto visivo |
|---|---|---|---|
| Tocco (Touch) | 0.0–0.3 | Interazione normale | Evidenziazione elemento |
| Pressione leggera (Peek) | 0.5–1.0 | Anteprima contenuto | Scheda con sfondo sfocato |
| Pressione profonda (Pop) | 2.0+ | Apertura a schermo intero | Animazione espansione scheda |
| Scorri verso l'alto | — | Azioni (condividi, copia) | Gruppo UIPreviewAction |
Transizione a UIContextMenuInteraction (iOS 13): Apple ha sostituito Peek and Pop con menu contestuali tramite UIContextMenuInteraction. La nuova API è più semplice: non richiede UIViewControllerPreviewingDelegate, supporta menu gerarchici (sottomenu), icone SF Symbols e funziona in modo identico con 3D Touch e Haptic Touch. Migrazione: registerForPreviewing deprecato da iOS 13. Sostituisci con UIContextMenuConfiguration, che si adatta automaticamente alle capacità del dispositivo.
UIContextMenuInteraction è un'API iOS moderna per i menu contestuali, disponibile da iOS 13. Viene aggiunta a qualsiasi UIView tramite addInteraction(_:). Il delegato UIContextMenuInteractionDelegate fornisce la configurazione del menu: UIContextMenuConfiguration con un identificatore, previewProvider (opzionale, per l'anteprima) e actionProvider (array di UIAction o UIMenu). Il menu contestuale viene attivato da 3D Touch (se disponibile) o Haptic Touch (Long Press su altri dispositivi).
// UIContextMenuInteraction con menu gerarchico
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: "Condividi",
image: UIImage(systemName: "square.and.arrow.up"),
handler: { _ in self.shareContent() })
let edit = UIAction(title: "Modifica",
image: UIImage(systemName: "pencil"),
handler: { _ in self.editContent() })
let delete = UIAction(title: "Elimina",
image: UIImage(systemName: "trash"),
attributes: .destructive,
handler: { _ in self.deleteContent() })
return UIMenu(title: "Azioni", children: [share, edit, delete])
}
}
}UIContextMenuConfiguration supporta previewProvider — un controller visualizzato come anteprima. Se previewProvider è nil, il menu contestuale viene mostrato senza anteprima. UIContextMenuContentPreviewProvider viene utilizzato per personalizzare le dimensioni e l'aspetto dell'anteprima. I menu contestuali ricevono automaticamente feedback tattile (Haptic Touch Engine) e animazione di apparizione (scala + dissolvenza).
Haptic Touch e 3D Touch sono tecnologie diverse che portano allo stesso risultato. 3D Touch è hardware (sensori di pressione nel display), Haptic Touch è software (Long Press + Taptic Engine per simulazione tattile). 3D Touch richiede costi di produzione (strato aggiuntivo di sensori), aumenta lo spessore dello schermo e la complessità di riparazione. Haptic Touch è più economico, più semplice da produrre e disponibile su tutti i dispositivi moderni (iPhone SE 2020, iPhone 11–16, iPad, iPod touch).
| Parametro | 3D Touch | Haptic Touch |
|---|---|---|
| Principio | Misurazione pressione (grammi) | Misurazione tempo (millisecondi) |
| Disponibilità | iPhone 6S–XS (limitato) | iPhone XR+, iPad, iPod touch |
| Velocità | Istantanea (~100 ms) | Con ritardo (~500 ms) |
| Livelli di pressione | 2 (peek + pop) | 1 (menu contestuale) |
| Feedback tattile | Taptic Engine (simulazione clic) | Taptic Engine (simulazione clic) |
| App Store | Quick Actions sull'icona | Quick Actions sull'icona |
| Calibrazione | Autocalibrazione in base alla forza utente | Non richiesta |
| Riparabilità | Complessa (sensori nel display) | Standard |
Impatto sull'UX: la velocità di 3D Touch è maggiore — l'utente ottiene il menu contestuale immediatamente premendo con forza. Haptic Touch richiede una pausa di 500 ms, che sembra più lenta. Tuttavia, Apple compensa con feedback tattile e animazione visiva. Gli utenti che sono passati da 3D Touch a Haptic Touch spesso notano la differenza di velocità. Per gli sviluppatori, la migrazione è trasparente: UIContextMenuInteraction funziona in modo identico su entrambe le tecnologie.
Quick Actions — un menu contestuale sull'icona dell'app nella schermata Home. La pressione forte (3D Touch) o Long Press (Haptic Touch) sull'icona mostra fino a 4 azioni rapide: "Nuovo messaggio" (Messages), "Scatta foto" (Camera), "Cerca" (Safari). Implementato tramite la chiave Info.plist UIApplicationShortcutItems o tramite il delegato UIApplicationShortcutItem. Le Quick Actions sono disponibili su tutti i dispositivi con iOS 13+ (Haptic Touch) o 3D Touch.
Trackpad della tastiera — premendo con forza la tastiera iOS, questa passa alla modalità trackpad: i tasti diventano inattivi e il movimento del dito sposta il cursore. 3D Touch attivava il trackpad con una pressione forte in qualsiasi punto della tastiera. Haptic Touch attiva il trackpad con una pressione prolungata sulla barra spaziatrice. La modalità trackpad è diventata uno degli usi più popolari di 3D Touch — gli utenti apprezzano il posizionamento preciso del cursore durante la modifica del testo.
Anteprima di link e foto — premendo con forza un link in Safari si mostra un'anteprima della pagina (peek) senza navigare. Allo stesso modo: premendo una foto in Messages si apre una versione ingrandita. Scorrere verso l'alto in modalità peek mostra le azioni: "Apri", "Aggiungi alla lista di lettura", "Copia". Tutti questi scenari funzionano tramite UIContextMenuInteraction nelle versioni moderne di iOS.
App di disegno e creative — in Procreate, Photoshop e altre app di disegno, la forza di pressione di 3D Touch controlla lo spessore del pennello, l'opacità o la saturazione del colore. Le app leggono UITouch.force (0.0–1.0) e lo convertono in parametri dello strumento. Tuttavia, per il disegno, Apple Pencil su iPad fornisce un controllo della pressione più preciso (con supporto per inclinazione e azimut), quindi 3D Touch nelle app creative su iPhone è meno richiesto.
Domande frequenti
3D Touch è una tecnologia hardware che misura la forza di pressione attraverso sensori capacitivi nel display (iPhone 6S–XS). Haptic Touch è una simulazione software che utilizza Long Press e feedback tattile del Taptic Engine. 3D Touch è più veloce (100 ms vs 500 ms) e supporta due livelli di forza (peek + pop). Haptic Touch è disponibile su tutti i dispositivi con iOS 13+, inclusi iPhone XR, tutti i modelli iPhone 11–16, iPad e iPod touch.
Nel codice, usa traitCollection.forceTouchCapability. Il valore .available significa che 3D Touch è supportato, .unavailable significa no, .unknown significa non ancora determinato (aspetta traitCollectionDidChange). Sui dispositivi con Haptic Touch, forceTouchCapability restituisce .unavailable, poiché Haptic Touch non utilizza sensori di forza hardware. Per gli utenti: controlla in Impostazioni → Accessibilità → Tocco → 3D Touch (solo su iPhone più vecchi).
Apple ha sostituito 3D Touch con Haptic Touch per diversi motivi: alto costo di produzione degli schermi con sensori di pressione, complessità di riparazione (sensori integrati nel display), consapevolezza limitata degli utenti (molti non conoscevano la funzione) e la transizione agli schermi OLED con Face ID, più difficili da calibrare per 3D Touch. Haptic Touch è più economico, più semplice e disponibile su un numero maggiore di dispositivi.
3D Touch è supportato da: iPhone 6S, 6S Plus, 7, 7 Plus, 8, 8 Plus, X, XS, XS Max. L'iPhone XR non ha 3D Touch (primo con Haptic Touch). Tutti i modelli iPhone 11, 12, 13, 14, 15, 16 e SE (2a e 3a generazione) utilizzano Haptic Touch. L'iPad non ha mai avuto 3D Touch. Sui dispositivi con 3D Touch, sono disponibili anche le impostazioni di sensibilità (Impostazioni → Accessibilità → Tocco → 3D Touch).
Sì, iOS emula automaticamente 3D Touch tramite Haptic Touch sui dispositivi senza supporto hardware. L'API UIContextMenuInteraction funziona in modo identico su tutti i dispositivi — il sistema stesso seleziona il grilletto (3D Touch o Long Press). Questo è trasparente per il tuo codice: il menu contestuale appare su tutti i dispositivi con iOS 13+. Non è necessario scrivere logica separata per 3D Touch e Haptic Touch — usa UIContextMenuConfiguration.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.