[SwiftUI] DragGesture 画像をドラッグする


GestureにはViewをタップするだけでなくドラッグも認識してくれ、画像のドラッグも簡単にできます。

Swift 5.1
Xcode 11.4

 

DragGesture

 
画像をドラッグさせるのはUIKitではtouchEventなどを使っていました

画像を指でドラッグさせるなどは、スマホになってできるようになった画期的な機能ですがどのようにプログラムするのでしょうか?意外と簡単です、簡単...

SwiftUIではDragGestureを使うことで可能となります。

 

 

DragGesture.Value

 
ViewのDragGestureを認識するために、Modifierから gesture(_:include:) を追加します。

DragGestureのイニシャライズ:

  • minimumDistance:ドラッグを認識する範囲
  • coordinateSpace:
    • local:Viewの座標系
    • grobal:画面の座標系

onChanged:Gestureが変化したときに実行するアクションを追加

onEnded:Gestureが終わった時のアクションを追加

updating: Gestureが変化したときにgesture state propertyをアップデートする、ただし値は保持されない

 
DragGesture.Value プロパティとして以下のものがあります

  • var location: CGPoint
    • 現在の場所
  • var predictedEndLocation: CGPoint
    • 現在の速度からの今止まった場合の最終位置の予測
  • var predictedEndTranslation: CGSize
    • 現在の速度からの今止まった場合の最終移動の予測
  • var startLocation: CGPoint
    • gestureの開始位置
  • var time: Date
    • 現在のドラッグイベントに関連付けられた時間
  • var translation: CGSize
    • ドラッグの開始から現在までの総移動合計
 
DragGesture.Value のインスタンスを生成して、ドラッグの変化に応じてViewの座標を変えていくとドラッグが実現します。

サンプルコード

 
適当な画像を1枚用意して(ここでは handbag@2x.png)
Assets.xcassetsに入れます。

画像のposition.x, position.yを初期化

onChanged と onEnded を使ってクロージャーでx,yの移動量の変化を画像の位置として設定

ContentView.swift

画像がドラッグされていきます。

References:
Gestures | Apple Developer Documentation
DragGesture – SwiftUI | Apple Developer Documentation
DragGesture.Value – DragGesture | Apple Developer
CoordinateSpace – SwiftUI | Apple Developer Documentation
updating(_:body:) – DragGesture | Apple Developer
onEnded(_:) – Gesture | Apple Developer Documentation
onChanged(_:) – DragGesture | Apple Developer Documentation

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

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


TECH ACADEMY
自宅にいながら1時間でプログラミング基礎を習得

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


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



とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


CodeCamp
~約20,000名の受講生と300社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp




直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。


Play Ground
本業と並行してやるには月額制なのがありがたいです。


無料で転職まで
これはiOSアプリ限定ではありませんが無料です
その代わり就職することを前提にしたスクールで「エンジニアになって職を得たい」のであれば手っ取り早いかもしれません

受講料無料:社会人転職コース


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


シェアする

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

フォローする