3D Touch: その概要、Force TouchとHaptic Touchのテクノロジー

著者: IT Sectr 公開日: 2026-02-28 読了時間: 10 分

3D Touch は、iPhoneディスプレイへの押圧力を認識するAppleのハードウェア技術であり、そのソフトウェアによる代替が Haptic Touch で、タッチ時間によって動作します。3D Touchは、画面マトリックスの下に設置された校正済みの圧力センサー(Force Touch)を使用し、軽い押圧(peek)と深い押圧(pop)を区別できます。iOS 13以降、Appleは3D TouchをHaptic Touchに置き換えました — これは、触覚フィードバックを伴うロングプレスによって強制押圧をシミュレートする技術です UIContextMenuInteraction

重要なポイント

  • 押圧力 — 3D Touchは圧力をグラム単位で測定;Haptic Touchは保持時間を使用
  • Peek and Pop — オリジナルの3D Touch UXパターン:プレビューのための軽い押圧(peek)、開くための深い押圧(pop)
  • UIContextMenuInteraction — Haptic Touchで動作するコンテキストメニューのためのモダンなiOS API
  • Force Touch — ディスプレイ内の静電容量センサーを通じて圧力を測定するAppleの技術
  • UIForceTouchCapability — デバイスでの3D Touchの利用可能性を確認するiOSメソッド

3D TouchとHaptic Touchとは?

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技術:圧力の測定方法

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を通じて力の値を取得できます。

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(校正の違いによる)。重要なアクションに力を使用しないでください — ユーザーはどれだけ強く押すべきかわからない可能性があります。常にHaptic Touch(ロングプレス)による代替手段を提供してください。

Peek and Pop:強制押圧のUXパターン

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

UIContextMenuInteraction は、iOS 13から利用可能な、コンテキストメニューのためのモダンなiOS APIです。addInteraction(_:)を介して任意のUIViewに追加されます。UIContextMenuInteractionDelegateがメニュー構成を提供します:識別子付きのUIContextMenuConfiguration、previewProvider(オプション、プレビュー用)、およびactionProvider(UIActionまたはUIMenuの配列)。コンテキストメニューは、3D Touch(利用可能な場合)またはHaptic Touch(他のデバイスではロングプレス)によって起動されます。

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 vs 3D Touch:比較

Haptic Touchと3D Touch は、同じ結果につながる異なる技術です。3D Touchはハードウェア(ディスプレイ内の圧力センサー)、Haptic Touchはソフトウェア(触覚シミュレーションのためのロングプレス+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ミリ秒の一時停止が必要で、より遅く感じられます。ただし、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とHaptic 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+を搭載したすべてのデバイスで利用可能です。

デバイスが3D Touchをサポートしているか確認する方法は?

コードでは、traitCollection.forceTouchCapability を使用します。値.availableは3D Touchがサポートされていることを意味し、.unavailableはサポートされていないこと、.unknownはまだ未確定であること(traitCollectionDidChangeを待つ)を意味します。Haptic Touch搭載デバイスでは、forceTouchCapabilityは.unavailableを返します。Haptic Touchはハードウェアの力センサーを使用しないためです。ユーザーの場合:設定 → アクセシビリティ → タッチ → 3D Touchで確認してください(古いiPhoneのみ)。

Appleが3D Touchを廃止した理由は?

Appleが 3D TouchをHaptic Touchに置き換えた 理由はいくつかあります:圧力センサー付き画面の高い製造コスト、修理の複雑さ(ディスプレイに統合されたセンサー)、限られたユーザー認知度(多くの人が機能を知らなかった)、および3D Touchの校正が難しいFace ID付きOLED画面への移行。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非搭載デバイスで3D Touchをエミュレートできますか?

はい、iOSは自動的に3D Touchをエミュレートします、ハードウェアサポートのないデバイスではHaptic Touchを通じて。UIContextMenuInteraction APIはすべてのデバイスで同じように機能します — システム自体がトリガー(3D Touchまたはロングプレス)を選択します。これはコードにとって透過的です:コンテキストメニューはiOS 13+を搭載したすべてのデバイスに表示されます。3D TouchとHaptic Touchで別々のロジックを記述する必要はありません — UIContextMenuConfigurationを使用してください。

まとめ

  • 3D Touch — ディスプレイ内のセンサーを通じて押圧力を測定するハードウェア技術(iPhone 6S–XS)
  • Haptic Touch — 触覚フィードバックを伴うロングプレスを使用するソフトウェア代替(iOS 13+)
  • Force Touch — 約10gの精度で圧力を測定する静電容量センサー技術
  • Peek and Pop — 2つの押圧レベルを持つオリジナルのUXパターン(プレビューと表示)
  • UIContextMenuInteraction — 両方の技術で統一された、コンテキストメニューのためのモダンなiOS API
  • Quick Actions — クイックアクションのためのアプリアイコンのコンテキストメニュー
  • UIForceTouchCapability — traitCollectionを通じた3D Touchの利用可能性の確認

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください