この記事では、SwiftUIでのバイブレーション(Vibration)の実装方法を紹介します。
AudioToolboxフレームワークを利用する5種類、UINotificationFeedbackGeneratorを利用する7種類、計12種類のパターンを紹介します。
◆動作検証環境
・ローカル環境:mac Catalina
・XCode:12.3
・SwiftUI:2.0
・iOS:14.0
・XCode:12.3
・SwiftUI:2.0
・iOS:14.0
スポンサードリンク
【SwiftUI】バイブレーション(Vibration)の実装コード
AudioToolbox、UINotificationFeedbackGeneratorを利用計12種類のパターンのバイブレーションの実装コードは以下のとおりです。
なお、複数回(下記コードでは3回)、複数回実行時の間隔の調整、ON、OFFボタンでのバイブレーション実行の方法も紹介しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | import SwiftUI import AudioToolbox struct VibrationTest: View { let generator = UINotificationFeedbackGenerator() @State var isVibrationOn = false var body: some View { ScrollView{ VStack(alignment: .center, spacing: 30.0) { // UINotificationFeedbackGenerator Group{ Button(action: { self.generator.notificationOccurred(.success) }) { Text("Notification - Success") } Button(action: { self.generator.notificationOccurred(.error) }) { Text("Notification - Error") } Button(action: { self.generator.notificationOccurred(.warning) }) { Text("Notification - Warning") } Button(action: { let impactLight = UIImpactFeedbackGenerator(style: .light) impactLight.impactOccurred() }) { Text("Impact - Light") } Button(action: { let impactMed = UIImpactFeedbackGenerator(style: .medium) impactMed.impactOccurred() }) { Text("Impact - Medium") } Button(action: { let impactHeavy = UIImpactFeedbackGenerator(style: .heavy) impactHeavy.impactOccurred() }) { Text("Impact - Heavy") } Button(action: { let selectionFeedback = UISelectionFeedbackGenerator() selectionFeedback.selectionChanged() }) { Text("Selection Feedback - Changed") } } // AudioToolbox Group{ // Button(action: { AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) {} }) { Text("kSystemSoundID_Vibrate") } Button(action: { AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(1102)) {} }) { Text("1102") } Button(action: { AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(1519)) {} }) { Text("1519") } Button(action: { AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(1520)) {} }) { Text("1520") } Button(action: { AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(1521)) {} }) { Text("1521") } } Group{ Button(action: { for _ in 0...2{ AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) {} sleep(1) } }) { Text("kSystemSoundID_Vibrate * 3 / every 1sec") } Button(action: { for _ in 0...2{ AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) {} Thread.sleep(forTimeInterval: 1.5) } }) { Text("kSystemSoundID_Vibrate * 3 / every 1.5sec") } Text("VibrationNoLimit") HStack{ Button(action: { isVibrationOn = true makeVibrationNoLimit() }) { Text("ON") } Button(action: { isVibrationOn = false }) { Text("OFF") } } } } .padding(.all, 30.0) } } func makeVibrationNoLimit() { if !isVibrationOn { return } AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) { makeVibrationNoLimit() sleep(1) } } } |
以上、SwiftUIでのバイブレーション(Vibration)の実装方法を紹介しました。