3D Touch:什么是它,Force Touch和Haptic Touch技术

作者: IT Sectr 发布日期: 2026-02-28 阅读时间: 10 分钟

3D Touch — 苹果的硬件技术,能够识别iPhone屏幕上的按压力度,及其软件替代品Haptic Touch,基于触摸时长工作。3D Touch使用安装在屏幕矩阵下方的校准压力传感器(Force Touch),可以区分轻按(peek)和重按(pop)。从iOS 13开始,苹果用Haptic Touch取代了3D Touch——一种通过长按(Long Press)模拟强力按压并带有触觉反馈的技术UIContextMenuInteraction

要点

  • 按压力度 — 3D Touch以克为单位测量压力;Haptic Touch使用按住时长
  • Peek and Pop — 3D Touch的原始UX模式:轻按(peek)预览,重按(pop)打开
  • UIContextMenuInteraction — 适用于Haptic Touch的现代iOS上下文菜单API
  • Force Touch — 苹果通过屏幕中的电容传感器测量压力的技术
  • UIForceTouchCapability — iOS中检查设备是否支持3D Touch的方法

什么是3D Touch和Haptic Touch?

3D Touch — 于iPhone 6S(2015年)首次亮相的硬件输入技术。屏幕表面下方设有电容传感器,用于测量玻璃与背光之间的距离。用手指按压时,玻璃会发生微米级的弯曲,传感器记录形变大小并将其转换为力度值(克)。iOS区分三个级别:轻触(touch)、中等按压(peek,约200克)和重按(pop,约400克)。

Haptic Touch — 3D Touch的软件替代品,于iOS 13(2019年)推出。Haptic Touch不是测量压力,而是使用长按(手指按住约500毫秒)来激活相同的操作。触觉反馈(haptic feedback)模拟“点击”的感觉,尽管没有发生任何物理按压。苹果转向Haptic Touch是因为3D Touch屏幕的生产复杂且成本高昂,特别是在过渡到带有Face ID的OLED面板时。

历史背景: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——仅从iPadOS 13开始支持Haptic Touch。Apple Watch在屏幕中使用Force Touch技术(与iPhone 3D Touch不同),该技术从watchOS 7和Series 6开始被移除。

Force Touch技术:如何测量压力

Force Touch — 苹果在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获取力度值。

swift
// 检查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)。松开后,力度值归零。最大力度值因设备而异:iPhone 6S为6.6666,iPhone 7/X最高可达20.0(由于校准不同)。不要将force用于关键操作——用户可能不知道要用多大的力按压。始终通过Haptic Touch(长按Long Press)提供替代方案。

Peek and Pop:强力按压的UX模式

Peek and Pop — 苹果在iPhone 6S中随3D Touch推出的原始UX模式。Peek——轻按(force约0.5–1.0),以预览卡片的形式显示内容预览(邮件、链接、照片)。Pop——更深地按压(force约2.0+),在全屏打开内容。Peek支持底部操作(分享、复制、回复),可通过在预览卡片上向上滑动访问。

Peek and Pop在UIKit中的实现包括三个组件:UIViewControllerPreviewingDelegate(包含previewingContext(_:viewControllerForLocation:)和previewingContext(_:commit:)方法的协议)、UIPreviewAction(底部操作)以及通过registerForPreviewing(with:sourceView:)注册。开发者指定在Peek时显示哪个ViewController以及在Pop时如何打开它。系统会自动添加视差动画和背景模糊。

手势力度(标准化)操作视觉效果
触摸(Touch)0.0–0.3正常交互元素高亮
轻按(Peek)0.5–1.0内容预览带背景模糊的卡片
重按(Pop)2.0+全屏打开卡片展开动画
向上滑动操作(分享、复制)UIPreviewAction组

过渡到UIContextMenuInteraction(iOS 13):苹果通过UIContextMenuInteraction用上下文菜单取代了Peek and Pop。新API更简单:不需要UIViewControllerPreviewingDelegate,支持分层菜单(子菜单)、SF Symbols图标,并且在3D Touch和Haptic Touch上工作方式相同。迁移:registerForPreviewing从iOS 13起已弃用。将其替换为UIContextMenuConfiguration,它会自动适应设备的能力。

上下文菜单:UIContextMenuInteraction

UIContextMenuInteraction — 从iOS 13开始可用的现代iOS上下文菜单API。通过addInteraction(_:)添加到任何UIView。UIContextMenuInteractionDelegate委托提供菜单配置:带有标识符的UIContextMenuConfiguration、previewProvider(可选,用于预览)和actionProvider(UIAction或UIMenu数组)。上下文菜单通过3D Touch(如果可用)或Haptic Touch(其他设备上长按Long Press)激活。

swift
// 带有分层菜单的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对比

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 TouchHaptic Touch
原理压力测量(克)时间测量(毫秒)
可用性iPhone 6S–XS(有限)iPhone XR+、iPad、iPod touch
速度即时(约100毫秒)有延迟(约500毫秒)
按压级别2级(peek + pop)1级(上下文菜单)
触觉反馈Taptic Engine(模拟点击)Taptic Engine(模拟点击)
App Store图标上的快速操作图标上的快速操作
校准自动适应用户力度不需要
可维修性复杂(传感器在屏幕中)标准

对UX的影响:3D Touch速度更快——用户在强力按压时立即获得上下文菜单。Haptic Touch需要500毫秒的暂停,感觉更慢。不过苹果通过触觉反馈和视觉动画弥补了这一点。从3D Touch过渡到Haptic Touch的用户通常会注意到速度差异。对于开发者来说,迁移是透明的:UIContextMenuInteraction在两种技术上的工作方式相同。

强力按压的应用场景

快速操作(Quick Actions)——主屏幕上应用程序图标上的上下文菜单。在图标上强力按压(3D Touch)或长按(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模式下向上滑动可显示操作:“打开”、“添加到阅读列表”、“拷贝”。所有这些场景在现代iOS版本中都通过UIContextMenuInteraction实现。

绘画和创意应用——在Procreate、Photoshop和其他绘画应用中,3D Touch的按压力度控制画笔的粗细、不透明度或颜色饱和度。应用读取UITouch.force(0.0–1.0)并将其转换为工具参数。然而,在iPad上使用Apple Pencil绘画可提供更精确的压力控制(支持倾斜和方位角),因此3D Touch在iPhone上的创意应用中需求较低。

常见问题

3D Touch和Haptic Touch有什么区别?

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。

如何检查设备是否支持3D Touch?

在代码中使用traitCollection.forceTouchCapability。值为.available表示支持3D Touch,.unavailable表示不支持,.unknown表示尚未确定(等待traitCollectionDidChange)。在支持Haptic Touch的设备上,forceTouchCapability返回.unavailable,因为Haptic Touch不使用硬件力度传感器。对于用户检查:设置→通用→辅助功能→3D Touch(仅限旧款iPhone)。

为什么苹果放弃了3D Touch?

苹果用Haptic Touch取代了3D Touch原因如下:带压力传感器的屏幕生产成本高、维修复杂(传感器集成在屏幕中)、用户认知有限(许多人不知道此功能)以及过渡到带有Face ID的OLED屏幕(更难为3D Touch校准)。Haptic Touch更便宜、更简单并且可在更多设备上使用。

哪些iPhone支持3D 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)。

能否在没有3D Touch的设备上模拟它?

是的,iOS会自动模拟3D Touch,在没有硬件支持的设备上通过Haptic Touch实现。UIContextMenuInteraction API在所有设备上的工作方式相同——系统自行选择触发器(3D Touch或长按Long Press)。对于您的代码来说这是透明的:上下文菜单在所有运行iOS 13+的设备上出现。您无需为3D Touch和Haptic Touch编写单独的逻辑——使用UIContextMenuConfiguration即可。

总结

  • 3D Touch——通过屏幕中的传感器测量按压力度的硬件技术(iPhone 6S–XS)
  • Haptic Touch——使用长按并带有触觉反馈的软件替代方案(iOS 13+)
  • Force Touch——用于压力测量的电容传感器技术,精度约10克
  • Peek and Pop——具有两个按压级别的原始UX模式(预览和打开)
  • UIContextMenuInteraction——两种技术通用的现代iOS上下文菜单API
  • Quick Actions——应用程序图标上的上下文菜单,用于快速操作
  • UIForceTouchCapability——通过traitCollection检查3D Touch的可用性

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读