[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



一人でアプリ開発の限界を感じたら

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンライン・スクールがいいと思います。


TECH ACADEMY
iPhoneアプリコース


こういうものではアプリ作れないと言う意見もありますが、それは結局本人のやる気があるかないかです。やる気があっても独学では突破しにくいところは教えてもらうのが一番早い。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン




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


シェアする

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

フォローする