【SwiftUI】.sensoryFeedback() とは?使い方や引数の意味、活用シーンをわかりやすく解説!

SwiftUIでユーザー体験をよりリッチにしたいときに便利なのが .sensoryFeedback() モディファイアです。

ボタン操作や画面遷移などに触覚フィードバック(いわゆるバイブレーション)を簡単に組み込むことができ、ユーザーにとって直感的で心地よい操作感を提供できます。

この記事では .sensoryFeedback() の基本的な意味や使い方、主要な引数の意味、活用シーンをわかりやすく解説します。

.sensoryFeedback() とは?

.sensoryFeedback() は、iOS 17 以降の SwiftUI で利用できるモディファイアです。

触覚フィードバック(ハプティック)を簡単に追加できます。

従来の UIKit では UINotificationFeedbackGeneratorUIImpactFeedbackGenerator を使っていました。

SwiftUIでは、.sensoryFeedback()を使うことでビューの状態変化に応じてより直感的にフィードバックを定義できるようになりました。

つまり、タップした時、切り替えた時、何かを完了した時などに、「振動でフィードバックを返す」という処理を、状態変数との連動だけで実現できるようになったのです。

具体例:トグル切り替え時に振動させる

下記サンプルコードは、Toggle の切り替えに応じてフィードバックを発生させる例です。

Toggle を切り替えるたびに、軽いタップ感のある振動が返ります(実機で確認してみて下さい)

このように状態変化に連動して自動的に触覚フィードバックを発生させることができます。

主要な引数とその意味

.sensoryFeedback() にはいくつかの指定方法があります。

基本の書き方

  • 第1引数 → フィードバックの種類(.success, .error, .selection, .impact(...) など)
  • trigger → どの状態変数の変化を検知して実行するか

動的に決めたい場合(クロージャ形式)

  • trigger → 監視する状態変数
  • クロージャoldValue(前の値)、newValue(新しい値)を見てフィードバックを選ぶ
この指定の場合は、状態の変化内容に応じて異なるフィードバックを返すことができます

引数の意味

それぞれの引数の意味は以下の通りです。

引数名 説明
feedback SensoryFeedback 発生させるフィードバックの種類(.success.error.selection など)
trigger Bool 状態変化を検知するトリガー(@State など)
closure (old: Bool, new: Bool) -> SensoryFeedback 新旧の状態を比較してどのフィードバックを使うか決定

フィードバックの種類の例

  • .selection: 軽いタップ感。Toggleなどに最適
  • .success: 成功時に使うフィードバック
  • .error: エラー時に使う強めのフィードバック
  • .impact(weight:intensity:): カスタムインパクト(強度と重さを指定)
  • .start, .increase, .decrease: 状態変化に応じた通知向きのタイプ

.sensoryFeedback の活用シーン

.sensoryFeedback() はユーザー操作のフィードバックをわかりやすくしたい場面で役立ちます。

以下のような状況で効果的に使えます。

  • Toggle や Switch の切り替え時にフィードバックを加える
  • 成功・失敗の操作(保存成功、バリデーションエラーなど)に対する反応
  • ボタンを押した際のアクションフィードバック
  • 増減ボタン、+/−ボタンなどに連動する軽いインパクト
  • スライダーの値変更に連動した触覚フィードバック

ユーザーは目ではなく「指で」UIを操作しているため、手触りを感じられるような工夫はUXを大きく向上させます。

.sensoryFeedback を使うときの注意点

便利な .sensoryFeedback() ですが、使う際にはいくつかの前提条件と注意点があります。

  • iOS 17 以降でのみ使用可能(古いOSでは利用不可)
  • SwiftUI の状態変化に連動して発生するため、trigger には状態変数が必要
  • あまり頻繁に発生させすぎると、不快なUXにつながる場合がある
  • 実機でしか触覚フィードバックは確認できない(Simulator では無効)

また、UIKit で既に UIFeedbackGenerator を使っているアプリに .sensoryFeedback() を混在させる場合は、設計を整理する必要があります。

まとめ

今回は SwiftUI の .sensoryFeedback() について詳しく紹介しました。

  • .sensoryFeedback() は iOS 17 以降の SwiftUI における触覚フィードバックのモディファイア
  • 状態変化に応じて自動的にフィードバックが発生するため、実装が非常に簡潔
  • .selection.success.impact など多様なスタイルをサポート
  • フィードバックの発生条件や種類を柔軟に指定できる
  • 実機上で直感的なUXを提供できるため、UI操作の質が大きく向上する

SwiftUI の自然な書き方で触覚フィードバックを導入できるこのモディファイアは、今後のUI開発において非常に強力なツールになるはずです!

ぜひ、自分のアプリに組み込んで、指先で心地よさを伝えるUXを実現してみてくださいね!

おすすめの記事