3D Touch は、iPhoneディスプレイへの押圧力を認識するAppleのハードウェア技術であり、そのソフトウェアによる代替が Haptic Touch で、タッチ時間によって動作します。3D Touchは、画面マトリックスの下に設置された校正済みの圧力センサー(Force Touch)を使用し、軽い押圧(peek)と深い押圧(pop)を区別できます。iOS 13以降、Appleは3D TouchをHaptic Touchに置き換えました — これは、触覚フィードバックを伴うロングプレスによって強制押圧をシミュレートする技術です UIContextMenuInteraction。
重要なポイント
3D Touch は、iPhone 6S(2015)でデビューしたハードウェア入力技術です。ディスプレイ表面の下では、静電容量センサーがガラスとバックライトの間の距離を測定します。指で押すと、ガラスが微視的に曲がり、センサーが変形量を検出して力の値(グラム)に変換します。iOSは3つのレベルを区別します:軽いタッチ(touch)、中程度の押圧(peek、約200g)、深い押圧(pop、約400g)。
Haptic Touch は、iOS 13(2019)で導入された3D Touchのソフトウェアによる代替です。圧力を測定する代わりに、Haptic Touchはロングプレス(指を約500ミリ秒保持)を使用して同じアクションを起動します。触覚フィードバックは「クリック」感をシミュレートしますが、物理的な押圧は発生しません。AppleがHaptic Touchに切り替えたのは、3D Touchディスプレイの製造の複雑さと高コスト、特にFace IDを備えたOLEDパネルへの移行時が理由です。
歴史的背景:3D TouchはiPhone 6Sで登場し、iPhone XS(2018)まで維持されました。iPhone XR(2018)は、3D Touchの代わりにHaptic 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 は、Appleが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を通じて力の値を取得できます。
// 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(校正の違いによる)。重要なアクションに力を使用しないでください — ユーザーはどれだけ強く押すべきかわからない可能性があります。常にHaptic Touch(ロングプレス)による代替手段を提供してください。
Peek and Pop は、iPhone 6Sの3D Touchで導入されたオリジナルのApple UXパターンです。Peekは軽い押圧(力〜0.5–1.0)で、プレビューカードにコンテンツ(メール、リンク、写真)のプレビューを表示します。Popはより深い押圧(力〜2.0+)で、コンテンツを全画面で開きます。Peekは下部にアクション(共有、コピー、返信)をサポートしており、プレビューカードを上にスワイプしてアクセスできました。
UIKitでのPeek and Popの実装 には3つのコンポーネントが含まれていました: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):AppleはPeek and PopをUIContextMenuInteractionによるコンテキストメニューに置き換えました。新しいAPIはよりシンプルです:UIViewControllerPreviewingDelegateを必要とせず、階層メニュー(サブメニュー)、SF Symbolsアイコンをサポートし、3D TouchとHaptic Touchの両方で同じように機能します。移行:registerForPreviewingはiOS 13で非推奨になりました。デバイスの機能に自動的に適応するUIContextMenuConfigurationに置き換えてください。
UIContextMenuInteraction は、iOS 13から利用可能な、コンテキストメニューのためのモダンなiOS APIです。addInteraction(_:)を介して任意のUIViewに追加されます。UIContextMenuInteractionDelegateがメニュー構成を提供します:識別子付きのUIContextMenuConfiguration、previewProvider(オプション、プレビュー用)、およびactionProvider(UIActionまたはUIMenuの配列)。コンテキストメニューは、3D Touch(利用可能な場合)またはHaptic Touch(他のデバイスではロングプレス)によって起動されます。
// 階層メニューを使用した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 は、同じ結果につながる異なる技術です。3D Touchはハードウェア(ディスプレイ内の圧力センサー)、Haptic Touchはソフトウェア(触覚シミュレーションのためのロングプレス+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ミリ秒) | 遅延あり(約500ミリ秒) |
| 押圧レベル | 2(peek + pop) | 1(コンテキストメニュー) |
| 触覚フィードバック | Taptic Engine(クリックシミュレーション) | Taptic Engine(クリックシミュレーション) |
| App Store | アイコンのクイックアクション | アイコンのクイックアクション |
| 校正 | ユーザーの力に応じた自動校正 | 不要 |
| 修理可能性 | 複雑(ディスプレイ内のセンサー) | 標準 |
UXへの影響:3D Touchの速度はより高速です — ユーザーは強く押すとすぐにコンテキストメニューを取得できます。Haptic Touchは500ミリ秒の一時停止が必要で、より遅く感じられます。ただし、Appleは触覚フィードバックと視覚アニメーションでこれを補っています。3D TouchからHaptic Touchに移行したユーザーは、速度の違いに気付くことがよくあります。開発者にとって、移行は透過的です:UIContextMenuInteractionは両方の技術で同じように機能します。
クイックアクション — ホーム画面のアプリアイコンのコンテキストメニュー。アイコンを強く押す(3D Touch)か長押し(Haptic Touch)すると、最大4つのクイックアクションが表示されます:「新規メッセージ」(Messages)、「写真を撮る」(Camera)、「検索」(Safari)。Info.plistキーUIApplicationShortcutItemsまたはUIApplicationShortcutItemデリゲートを通じて実装されます。クイックアクションは、iOS 13+(Haptic Touch)または3D Touchを搭載したすべてのデバイスで利用可能です。
キーボードトラックパッド — iOSキーボードを強く押すと、トラックパッドモードに切り替わります:キーが非アクティブになり、指の動きがカーソルを移動します。3D Touchはキーボードのどこでも強く押すことでトラックパッドを起動しました。Haptic Touchはスペースバーを長押しすることでトラックパッドを起動します。トラックパッドモードは3D Touchの最も一般的な用途の1つになりました — ユーザーはテキスト編集時の正確なカーソル位置決めを高く評価しています。
リンクと写真のプレビュー — Safariでリンクを強く押すと、移動せずにページプレビュー(peek)が表示されます。同様に:Messagesで写真を押すと拡大版が開きます。Peekモードで上にスワイプすると、アクションが表示されます:「開く」、「リーディングリストに追加」、「コピー」。これらのシナリオはすべて、iOSの最新バージョンでUIContextMenuInteractionを通じて機能します。
描画およびクリエイティブアプリ — Procreate、Photoshop、その他の描画アプリでは、3D Touchの押圧力がブラシの太さ、不透明度、色の彩度を制御します。アプリはUITouch.force(0.0–1.0)を読み取り、ツールパラメーターに変換します。ただし、描画に関しては、iPadのApple Pencilがより正確な筆圧制御(傾きと方位角のサポート付き)を提供するため、iPhoneのクリエイティブアプリでの3D Touchの需要は低くなっています。
よくある質問
3D Touch は、ディスプレイ内の静電容量センサーを通じて押圧力を測定するハードウェア技術です(iPhone 6S–XS)。Haptic Touch は、ロングプレスとTaptic Engineからの触覚フィードバックを使用するソフトウェアシミュレーションです。3D Touchはより高速で(100ミリ秒対500ミリ秒)、2つの力のレベル(peek + pop)をサポートします。Haptic Touchは、iPhone XR、すべてのiPhone 11–16モデル、iPad、iPod touchを含む、iOS 13+を搭載したすべてのデバイスで利用可能です。
コードでは、traitCollection.forceTouchCapability を使用します。値.availableは3D Touchがサポートされていることを意味し、.unavailableはサポートされていないこと、.unknownはまだ未確定であること(traitCollectionDidChangeを待つ)を意味します。Haptic Touch搭載デバイスでは、forceTouchCapabilityは.unavailableを返します。Haptic Touchはハードウェアの力センサーを使用しないためです。ユーザーの場合:設定 → アクセシビリティ → タッチ → 3D Touchで確認してください(古いiPhoneのみ)。
Appleが 3D TouchをHaptic Touchに置き換えた 理由はいくつかあります:圧力センサー付き画面の高い製造コスト、修理の複雑さ(ディスプレイに統合されたセンサー)、限られたユーザー認知度(多くの人が機能を知らなかった)、および3D Touchの校正が難しいFace ID付きOLED画面への移行。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を通じて。UIContextMenuInteraction APIはすべてのデバイスで同じように機能します — システム自体がトリガー(3D Touchまたはロングプレス)を選択します。これはコードにとって透過的です:コンテキストメニューはiOS 13+を搭載したすべてのデバイスに表示されます。3D TouchとHaptic Touchで別々のロジックを記述する必要はありません — UIContextMenuConfigurationを使用してください。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。