こんにちはコーヤです。
このページでは、SwiftUIでのバイブレーションの使い方をご紹介します。
以下のバージョンで動作確認しています。
- Xcode 14.2
- Swift 5.7.2
バイブレーションの種類
バイブレーションは2種類あります。1回振動(ブー)と2回振動(ブッブー)です。
その2種類を組み合わせて、何秒おきに何回振動させるなどのカスタムや、振動させ続けるなどができます。
バイブレーションのソースコード
2行目のimport文を忘れないように注意です。
import SwiftUI
import AudioToolbox
struct ContentView: View {
@State var isVibration = false
var body: some View {
VStack {
Button("Once") {
AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) {}
}
Button("Twice") {
AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(1011)) {}
}
//0.6秒おきに5回振動
Button("Custom") {
for _ in 0...4{
AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) {}
Thread.sleep(forTimeInterval: 0.6)
}
}
HStack {
Button("Infinity-On") {
isVibration = true
vibration()
}
Button("Infinity-Off") {
isVibration = false
}
}
}
.buttonStyle(.borderedProminent)
.font(.largeTitle)
}
func vibration() {
if !isVibration {
return
} else {
//1秒おきに振動を続ける
AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) {
Thread.sleep(forTimeInterval: 1.0)
vibration()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Thread.sleep(forTimeInterval: 0.6)で0.6秒おきに振動させていますが、この間隔が短すぎるとうまく振動しないようです。私の環境だと0.6秒なら正常に振動しましたが、0.5秒だとダメでした。
IDが1011か1311だと2回振動になるみたいです。他のIDを入れたら別の振動方法になるのかもしれません。ご存じの方いらっしゃったらご教示いただけると幸いです。
以上です。ご参考になれば幸いです。
コメント欄