【SwiftUI】システムの触覚の使い方

こんにちはコーヤです。

このページでは、システムの触覚の使い方をご紹介します。システムの触覚とは、物理的なボタンを押したときの反動を再現するようにiPhoneが一瞬だけ振動する機能です。

以下のバージョンで動作確認しています。

  • Xcode 14.2
  • Swift 5.7.2

システムの触覚の種類

システムの触覚は7種類あります。

それぞれiPhoneの振動を丸で表したのが以下の図です。丸の大きさが振動の大きさを表しています。

SuccessとWarningは2回振動しますが、大小で振動するか小大で振動するかの違いがあります。(注意深く触っていないと違いが分からないくらいの差です。)

Errorは3回振動するので他との違いが分かりやすいです。

システムの触覚のソースコード

2行目のimport文を忘れないように注意です。

import SwiftUI
import AudioToolbox

struct ContentView: View {
    
    let UINFGenerator = UINotificationFeedbackGenerator()
    let UIIFGeneratorHeavy = UIImpactFeedbackGenerator(style: .heavy)
    let UIIFGeneratorMedium = UIImpactFeedbackGenerator(style: .medium)
    let UIIFGeneratorLight = UIImpactFeedbackGenerator(style: .light)
    let UISFGenerator = UISelectionFeedbackGenerator()
    
    var body: some View {
        VStack(spacing: 20) {
            VStack {
                Text("UINotificationFeedbackGenerator")
                    .font(.title)
                HStack {
                    Button("Success") {
                        UINFGenerator.notificationOccurred(.success)
                    }
                    Button("Error") {
                        UINFGenerator.notificationOccurred(.error)
                    }
                    Button("Warning") {
                        UINFGenerator.notificationOccurred(.warning)
                    }
                }
                .buttonStyle(.borderedProminent)
            }
            Divider()
            VStack {
                Text("UIImpactFeedbackGenerator")
                    .font(.title)
                HStack {
                    Button("Heavy") {
                        UIIFGeneratorHeavy.impactOccurred()
                    }
                    Button("Medium") {
                        UIIFGeneratorMedium.impactOccurred()
                    }
                    Button("Light") {
                        UIIFGeneratorLight.impactOccurred()
                    }
                }
                .buttonStyle(.borderedProminent)
            }
            Divider()
            VStack {
                Text("UISelectionFeedbackGenerator")
                    .font(.title)
                HStack {
                    Button("Changed") {
                        UISFGenerator.selectionChanged()
                    }
                }
                .buttonStyle(.borderedProminent)
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

システムの触覚が動作しない場合、iPhoneの設定アプリでOFFにしていないか確認しましょう。

コメント欄