
SwiftUIでユーザー体験をよりリッチにしたいときに便利なのが .sensoryFeedback() モディファイアです。
ボタン操作や画面遷移などに触覚フィードバック(いわゆるバイブレーション)を簡単に組み込むことができ、ユーザーにとって直感的で心地よい操作感を提供できます。
この記事では .sensoryFeedback() の基本的な意味や使い方、主要な引数の意味、活用シーンをわかりやすく解説します。
.sensoryFeedback() とは?
.sensoryFeedback() は、iOS 17 以降の SwiftUI で利用できるモディファイアです。
触覚フィードバック(ハプティック)を簡単に追加できます。
従来の UIKit では UINotificationFeedbackGenerator や UIImpactFeedbackGenerator を使っていました。
SwiftUIでは、.sensoryFeedback()を使うことでビューの状態変化に応じてより直感的にフィードバックを定義できるようになりました。
つまり、タップした時、切り替えた時、何かを完了した時などに、「振動でフィードバックを返す」という処理を、状態変数との連動だけで実現できるようになったのです。
具体例:トグル切り替え時に振動させる
下記サンプルコードは、Toggle の切り替えに応じてフィードバックを発生させる例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import SwiftUI struct ContentView: View { @State private var isOn = false var body: some View { Toggle("選択モード", isOn: $isOn) .padding() .sensoryFeedback(.selection, trigger: isOn) } } |
Toggle を切り替えるたびに、軽いタップ感のある振動が返ります(実機で確認してみて下さい)
このように状態変化に連動して自動的に触覚フィードバックを発生させることができます。
主要な引数とその意味
.sensoryFeedback() にはいくつかの指定方法があります。
基本の書き方
|
1 |
.sensoryFeedback(<フィードバックの種類>, trigger: <状態変数>) |
- 第1引数 → フィードバックの種類(
.success,.error,.selection,.impact(...)など) - trigger → どの状態変数の変化を検知して実行するか
動的に決めたい場合(クロージャ形式)
|
1 2 3 4 |
.sensoryFeedback(trigger: <状態変数>) { oldValue, newValue in <戻り値としてフィードバックの種類を返す> } |
- trigger → 監視する状態変数
- クロージャ →
oldValue(前の値)、newValue(新しい値)を見てフィードバックを選ぶ
|
1 2 3 4 5 6 7 8 9 |
Toggle("状態", isOn: $isOn) .sensoryFeedback(trigger: isOn) { oldValue, newValue in if newValue { return .success // ON に切り替えたら成功フィードバック } else { return .error // OFF に切り替えたらエラーフィードバック } } |
引数の意味
それぞれの引数の意味は以下の通りです。
| 引数名 | 型 | 説明 |
|---|---|---|
| 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を実現してみてくださいね!
