見出し画像

SwiftUIでtouchDownとtouchUpを検知する

概要

ユーザーがボタンを触り始めたことを検知するtouchDown
ボタンから指を離したことを検知するtouchUpをSwiftUIで検知する方法です。

例として、スピークバディアプリ内ではこの様に使用しています。

タップ開始時にViewを縮め、指を離した瞬間にViewを元の大きさに戻しつつ展開

コード紹介

SwiftUIで提供されているButtonStyleを使用します。

実装

struct SBButtonStyle: ButtonStyle {
  let onTouchDown: () -> Void
  let onTouchUp: () -> Void
  
  func makeBody(configuration: Configuration) -> some View {
    configuration.label
      .onChange(of: configuration.isPressed) { $0 ? onTouchDown() : onTouchUp() }
      .frame(maxWidth: .infinity, maxHeight: .infinity)
      .contentShape(Rectangle())
  }
}

使用例

Button("Title", action: {
  // ボタンアクション
})
.buttonStyle(
  SBButtonStyle(onTouchDown: {
    // タップ開始時の処理
  }, onTouchUp: {
    // 指を離したときの処理
  })
)

おわり

お読みいただきありがとうございます!
もしなにかのお役に立つことがございましたら、
♡を頂けますとすごく励みになります😊

この記事が気に入ったらサポートをしてみませんか?