0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SwiftUI NavigationLinkに触覚フィードバックを追加する方法

Last updated at Posted at 2025-07-25

本記事では、SwiftUIのNavigationLinkをタップした際に、触覚フィードバック(振動)を追加してユーザー体験を向上させる方法を紹介します。
何も考えずに実装すると、NavigationLinkが正常に動作しなくなってしまうアンチケースも紹介します。

触覚フィードバック関数の準備

まず、触覚フィードバックを実行する関数を用意します。

import Foundation
import class UIKit.UIImpactFeedbackGenerator

public func playImpactHaptic(_ style: UIImpactFeedbackGenerator.FeedbackStyle) {
    let generator = UIImpactFeedbackGenerator(style: style)
    generator.impactOccurred()
}

NavigationLinkに触覚フィードバックを追加

.simultaneousGestureを付与することで、NavigationLinkの標準動作を妨げることなく触覚フィードバックを追加できます。

NavigationLink(destination: DetailView()) {
    Text("詳細を見る")
}
.simultaneousGesture(
    TapGesture()
        .onEnded { _ in
            playImpactHaptic(.light)
        }
)

アンチケース

以下は、アンケースとなります。
NavigationLinkをタップした時にonTapGestureが判定を奪い取り、画面遷移することはないです。

NavigationLink(destination: DetailView()) {
    Text("詳細を見る")
}
.onTapGesture {
    playImpactHaptic(.light)
}

SimultaneousGesture (サイマルテイニアス ジェスチャー)

以下の様なイメージを持っています。
元のタップ処理:「画面遷移する」
追加のタップ処理:「振動させる」
→ 両方が同時に実行される = 「画面遷移しながら振動もする」
つまり、既存の機能を壊さずに新しい機能を追加したい時に使うのがSimultaneousGestureです。

まとめ

.simultaneousGestureを付与することで、NavigationLinkの標準機能を維持しながら、簡単に触覚フィードバックを追加できます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?