3D Touch es una tecnología hardware de Apple que reconoce la fuerza de presión en la pantalla del iPhone, y su reemplazo por software Haptic Touch, que funciona mediante la duración del toque. 3D Touch utiliza sensores de presión calibrados instalados bajo la matriz de la pantalla (Force Touch), y permite distinguir entre una presión ligera (peek) y una profunda (pop). A partir de iOS 13, Apple reemplazó 3D Touch por Haptic Touch — una tecnología que simula la presión mediante Long Press con respuesta háptica UIContextMenuInteraction.
Puntos clave
3D Touch es una tecnología de entrada hardware que debutó en el iPhone 6S (2015). Debajo de la superficie de la pantalla, sensores capacitivos miden la distancia entre el vidrio y la retroiluminación. Al presionar con el dedo, el vidrio se deforma microscópicamente, los sensores detectan la cantidad de deformación y la convierten en un valor de fuerza (gramos). iOS distingue tres niveles: toque ligero (touch), presión media (peek, ~200 g) y presión profunda (pop, ~400 g).
Haptic Touch es un reemplazo por software de 3D Touch, presentado en iOS 13 (2019). En lugar de medir la presión, Haptic Touch utiliza Long Press (mantener el dedo ~500 ms) para activar las mismas acciones. La respuesta háptica simula la sensación de un "clic", aunque no se produce ninguna presión física. Apple cambió a Haptic Touch debido a la complejidad y el alto costo de fabricación de las pantallas 3D Touch, especialmente al hacer la transición a paneles OLED con Face ID.
Antecedentes históricos: 3D Touch apareció en el iPhone 6S y se mantuvo hasta el iPhone XS (2018). El iPhone XR (2018) fue el primer dispositivo con Haptic Touch en lugar de 3D Touch. A partir del iPhone 11 (2019) y iOS 13, todos los nuevos iPhones usan Haptic Touch. El iPad nunca recibió 3D Touch, solo Haptic Touch con iPadOS 13. El Apple Watch utiliza la tecnología Force Touch en la pantalla (diferente del 3D Touch del iPhone), que se eliminó a partir de watchOS 7 y Series 6.
Force Touch es una tecnología de medición de fuerza utilizada por Apple en iPhone 6S–XS (3D Touch), trackpads de MacBook (2015+) y Apple Watch (Series 1–5). Se basa en sensores capacitivos ubicados alrededor del perímetro de la pantalla. Al presionar, el vidrio se deforma micras, los sensores registran el cambio de distancia y calculan la fuerza mediante una curva de calibración. El sistema tiene en cuenta la temperatura ambiente (calibración cada 24 horas) y la posición del dedo (el centro de la pantalla es más sensible).
Calibración es un aspecto crítico de 3D Touch. Cada iPhone se calibra individualmente en la fábrica. iOS también realiza una calibración dinámica: en la primera presión después del inicio, el sistema solicita la fuerza máxima del usuario y ajusta la sensibilidad. Los sensores tienen una precisión de ±10 gramos, rango — de 0 a 500+ gramos. El desarrollador puede obtener el valor de fuerza a través de UITouch.force (normalizado de 0.0 al máximo) o UITouch.maximumPossibleForce.
// Comprobación de disponibilidad de 3D Touch y lectura de fuerza de presión
class ForceTouchViewController: UIViewController {
override func touchesMoved(_ touches: Set<UITouch>,
with event: UIEvent?) {
guard let touch = touches.first else { return }
// Comprobación de soporte de Force Touch en el dispositivo
guard self.traitCollection.forceTouchCapability
== UIForceTouchCapability.available else {
// El dispositivo no admite 3D Touch
return
}
// Lectura de fuerza de presión (0.0 — max)
let force = touch.force // 0.0 ... maximumPossibleForce
let maxForce = touch.maximumPossibleForce
// Normalización al rango 0.0–1.0 para visualización
let normalizedForce = force / maxForce
// Reacción visual a la fuerza de presión (escala del elemento)
forceView.transform = CGAffineTransform(scaleX: 1.0 + normalizedForce * 0.3,
y: 1.0 + normalizedForce * 0.3)
}
}Limitaciones: 3D Touch solo funciona con un toque activo (UITouch.phase == .began o .moved). Después de soltar, el valor de fuerza se restablece a cero. El valor máximo de fuerza varía entre dispositivos: iPhone 6S — 6.6666, iPhone 7/X — hasta 20.0 (debido a diferente calibración). No use la fuerza para acciones críticas — el usuario puede no saber con qué fuerza presionar. Siempre proporcione una alternativa a través de Haptic Touch (Long Press).
Peek and Pop es el patrón UX original de Apple presentado con 3D Touch en el iPhone 6S. Peek es una presión ligera (fuerza ~0.5–1.0) que muestra una vista previa del contenido (correo electrónico, enlace, foto) en una tarjeta de vista previa. Pop es una presión más profunda (fuerza ~2.0+) que abre el contenido en pantalla completa. Peek admitía acciones en la parte inferior (compartir, copiar, responder), accesibles deslizando hacia arriba en la tarjeta de vista previa.
Implementación de Peek and Pop en UIKit incluía tres componentes: UIViewControllerPreviewingDelegate (un protocolo con métodos previewingContext(_:viewControllerForLocation:) y previewingContext(_:commit:)), UIPreviewAction (acciones en la parte inferior) y registro a través de registerForPreviewing(with:sourceView:). El desarrollador especificaba qué ViewController mostrar en Peek y cómo abrirlo en Pop. El sistema agregaba automáticamente animación de paralaje y desenfoque de fondo.
| Gesto | Fuerza (norm.) | Acción | Efecto visual |
|---|---|---|---|
| Toque (Touch) | 0.0–0.3 | Interacción normal | Resaltado del elemento |
| Presión ligera (Peek) | 0.5–1.0 | Vista previa del contenido | Tarjeta con desenfoque de fondo |
| Presión profunda (Pop) | 2.0+ | Apertura en pantalla completa | Animación de expansión de tarjeta |
| Deslizar hacia arriba | — | Acciones (compartir, copiar) | Grupo UIPreviewAction |
Transición a UIContextMenuInteraction (iOS 13): Apple reemplazó Peek and Pop por menús contextuales a través de UIContextMenuInteraction. La nueva API es más simple: no requiere UIViewControllerPreviewingDelegate, admite menús jerárquicos (submenús), iconos SF Symbols y funciona de manera idéntica con 3D Touch y Haptic Touch. Migración: registerForPreviewing obsoleto desde iOS 13. Reemplácelo con UIContextMenuConfiguration, que se adapta automáticamente a las capacidades del dispositivo.
UIContextMenuInteraction es una API moderna de iOS para menús contextuales, disponible desde iOS 13. Se agrega a cualquier UIView a través de addInteraction(_:). El delegado UIContextMenuInteractionDelegate proporciona la configuración del menú: UIContextMenuConfiguration con un identificador, previewProvider (opcional, para vista previa) y actionProvider (matriz de UIAction o UIMenu). El menú contextual se activa con 3D Touch (si está disponible) o Haptic Touch (Long Press en otros dispositivos).
// UIContextMenuInteraction con menú jerárquico
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: "Compartir",
image: UIImage(systemName: "square.and.arrow.up"),
handler: { _ in self.shareContent() })
let edit = UIAction(title: "Editar",
image: UIImage(systemName: "pencil"),
handler: { _ in self.editContent() })
let delete = UIAction(title: "Eliminar",
image: UIImage(systemName: "trash"),
attributes: .destructive,
handler: { _ in self.deleteContent() })
return UIMenu(title: "Acciones", children: [share, edit, delete])
}
}
}UIContextMenuConfiguration admite previewProvider — un controlador que se muestra como vista previa. Si previewProvider es nil, el menú contextual se muestra sin vista previa. UIContextMenuContentPreviewProvider se utiliza para personalizar el tamaño y la apariencia de la vista previa. Los menús contextuales reciben automáticamente respuesta háptica (Haptic Touch Engine) y animación de aparición (escala + desvanecimiento).
Haptic Touch y 3D Touch son tecnologías diferentes que conducen al mismo resultado. 3D Touch es hardware (sensores de presión en la pantalla), Haptic Touch es software (Long Press + Taptic Engine para simulación háptica). 3D Touch requiere costos de fabricación (capa adicional de sensores), aumenta el grosor de la pantalla y la complejidad de la reparación. Haptic Touch es más barato, más simple de fabricar y está disponible en todos los dispositivos modernos (iPhone SE 2020, iPhone 11–16, iPad, iPod touch).
| Parámetro | 3D Touch | Haptic Touch |
|---|---|---|
| Principio | Medición de presión (gramos) | Medición de tiempo (milisegundos) |
| Disponibilidad | iPhone 6S–XS (limitado) | iPhone XR+, iPad, iPod touch |
| Velocidad | Instantánea (~100 ms) | Con retraso (~500 ms) |
| Niveles de presión | 2 (peek + pop) | 1 (menú contextual) |
| Respuesta háptica | Taptic Engine (simulación de clic) | Taptic Engine (simulación de clic) |
| App Store | Quick Actions en el icono | Quick Actions en el icono |
| Calibración | Autocalibración según fuerza del usuario | No requerida |
| Reparabilidad | Compleja (sensores en la pantalla) | Estándar |
Impacto en UX: la velocidad de 3D Touch es mayor — el usuario obtiene el menú contextual inmediatamente al presionar fuerte. Haptic Touch requiere una pausa de 500 ms, lo que se siente más lento. Sin embargo, Apple lo compensa con respuesta háptica y animación visual. Los usuarios que cambiaron de 3D Touch a Haptic Touch a menudo notan la diferencia de velocidad. Para los desarrolladores, la migración es transparente: UIContextMenuInteraction funciona de manera idéntica en ambas tecnologías.
Quick Actions — un menú contextual en el icono de la aplicación en la pantalla de inicio. La presión fuerte (3D Touch) o Long Press (Haptic Touch) en el icono muestra hasta 4 acciones rápidas: "Nuevo mensaje" (Messages), "Tomar foto" (Camera), "Buscar" (Safari). Se implementa mediante la clave Info.plist UIApplicationShortcutItems o a través del delegado UIApplicationShortcutItem. Quick Actions están disponibles en todos los dispositivos con iOS 13+ (Haptic Touch) o 3D Touch.
Trackpad del teclado — al presionar con fuerza el teclado de iOS, este cambia al modo trackpad: las teclas se vuelven inactivas y el movimiento del dedo mueve el cursor. 3D Touch activaba el trackpad con una presión fuerte en cualquier lugar del teclado. Haptic Touch activa el trackpad con una presión prolongada en la barra espaciadora. El modo trackpad se convirtió en uno de los usos más populares de 3D Touch: los usuarios aprecian el posicionamiento preciso del cursor al editar texto.
Vista previa de enlaces y fotos — al presionar con fuerza un enlace en Safari, se muestra una vista previa de la página (peek) sin navegar. Del mismo modo: al presionar una foto en Messages se abre una versión ampliada. Deslizar hacia arriba en el modo peek muestra acciones: "Abrir", "Agregar a la lista de lectura", "Copiar". Todos estos escenarios funcionan a través de UIContextMenuInteraction en las versiones modernas de iOS.
Aplicaciones de dibujo y creativas — en Procreate, Photoshop y otras aplicaciones de dibujo, la fuerza de presión de 3D Touch controla el grosor del pincel, la opacidad o la saturación del color. Las aplicaciones leen UITouch.force (0.0–1.0) y lo convierten en parámetros de la herramienta. Sin embargo, para dibujar, Apple Pencil en iPad proporciona un control de presión más preciso (con soporte de inclinación y azimut), por lo que 3D Touch en aplicaciones creativas en iPhone tiene menos demanda.
Preguntas frecuentes
3D Touch es una tecnología hardware que mide la fuerza de presión mediante sensores capacitivos en la pantalla (iPhone 6S–XS). Haptic Touch es una simulación por software que utiliza Long Press y respuesta háptica del Taptic Engine. 3D Touch es más rápido (100 ms vs 500 ms) y admite dos niveles de fuerza (peek + pop). Haptic Touch está disponible en todos los dispositivos con iOS 13+, incluidos iPhone XR, todos los modelos iPhone 11–16, iPad y iPod touch.
En el código, use traitCollection.forceTouchCapability. El valor .available significa que 3D Touch es compatible, .unavailable que no, .unknown que aún no se ha determinado (espere traitCollectionDidChange). En dispositivos con Haptic Touch, forceTouchCapability devuelve .unavailable, ya que Haptic Touch no usa sensores de fuerza hardware. Para los usuarios: verifique en Configuración → Accesibilidad → Táctil → 3D Touch (solo en iPhones antiguos).
Apple reemplazó 3D Touch por Haptic Touch por varias razones: alto costo de producción de pantallas con sensores de presión, complejidad de reparación (sensores integrados en la pantalla), conocimiento limitado del usuario (muchos no conocían la función) y la transición a pantallas OLED con Face ID, que son más difíciles de calibrar para 3D Touch. Haptic Touch es más barato, más simple y está disponible en una mayor cantidad de dispositivos.
3D Touch es compatible con: iPhone 6S, 6S Plus, 7, 7 Plus, 8, 8 Plus, X, XS, XS Max. El iPhone XR no tiene 3D Touch (primero con Haptic Touch). Todos los modelos iPhone 11, 12, 13, 14, 15, 16 y SE (2.ª y 3.ª generación) usan Haptic Touch. El iPad nunca tuvo 3D Touch. En dispositivos con 3D Touch, también están disponibles los ajustes de sensibilidad (Configuración → Accesibilidad → Táctil → 3D Touch).
Sí, iOS emula automáticamente 3D Touch a través de Haptic Touch en dispositivos sin soporte hardware. La API UIContextMenuInteraction funciona de manera idéntica en todos los dispositivos: el propio sistema selecciona el disparador (3D Touch o Long Press). Esto es transparente para su código: el menú contextual aparece en todos los dispositivos con iOS 13+. No necesita escribir lógica separada para 3D Touch y Haptic Touch — use UIContextMenuConfiguration.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.