[SwiftUI] タップや長押しの認識、onTapGestureとonLongPressGesture

Viewのタップや長押しを認識してアクションを起こす機能が Modifiers の onTapGesture, onLongPressGesture の設定で可能です。
Storyboardでは画面タッチや長押しの機能が UITapGestureRecognizer, UILongPressGestureRecognizer がありました。似たような名前ですがそのまま置き換えはできません

Xcode 13.4.1

Gesture

 

  • onTapGesture:タップ
  • onLongPressGesture:長押し

これらはViewのModifier設定なので Text や Image などViewそれぞれ個別に設定できます。
 

 

onTapGesture

 

例として「Hello World」にonTapGestureの機能を追加してみましょう

コードの「Text」あるいはPreviewの「Hello World!」から
画面右のUtility AreaにあるModifierの「Add Modifier」にて

on Tap Gesture を探して追加します。

onTapGestureがコードに反映されます。
 

 
タップするたびにテキストが変わるようにif文でtoggleを使ってみます

ContentView

 
Toggleを使ってタップされるとフラグが反転するようにしました。
 

 

これはTextですがButtonのような感じですね。

onTapGestureの定義としてはこれ以外にタップ回数を数えるcountがあります

countを使えば、例えばダブルタップで発火するようにすることも可能です。
連続してタップするケースでゆっくり2回では発火しない

 

onLongPressGesture

 

Tapと同じよう .onLongPressGesture を追加しますが今回はPreviewの
addModifireから選択

Text に.onLongPressGesture が追加されました 

 
同じようにtoggleで切り替えを試してみましょう
ContentView

 

LongPressですがTapとの違いは持続時間によるのですが、デフォルトでは0.5sec
これを2.0secなどに変更することができます。

 
onLongPressGestureの定義は以下のようになって、最小判定時間以外にもいくつかの設定が可能です。
 

  • minimumDuration:最小判定時間、デフォルト0.5sec
  • maximumDistance:最大判定距離、デフォルト10 (CGFloat)
    • これは判定範囲が広がるのではなく判定計測が始まってからPress位置が移動しても判定継続される範囲のこと
  • pressing:判定の開始と終了をBoolで取り出せる、デフォルトはnil
  • perform:LongPressでのアクション

 
 
References:
onTapGesture(count:perform:) – Text | Apple Developer
onLongPressGesture(minimumDuration – Apple Developer
minimumDuration – LongPressGesture | Apple Developer
maximumDistance – LongPressGesture | Apple Developer


誤字脱字、意味不明などのご意見は 謙: e-mail まで
ブックマークしておくと便利です このエントリーをはてなブックマークに追加
Twitter:


シェアする

  • このエントリーをはてなブックマークに追加

フォローする