先日のこちらでは、手を離したら中央に戻ってしまいましたが、こちらで指を離したところに表示をしている状態に変更する方法です。
実装コード
.swift
struct DraggableImageView: View {
@State private var currentDrag: CGSize = .zero // 画像の位置を管理する変数
@State private var startPosition: CGSize = .zero // 開始位置を保持
var body: some View {
Image(systemName: "star.fill")
.resizable()
.frame(width: 50, height: 50)
.position(x: UIScreen.main.bounds.width / 2 + startPosition.width + currentDrag.width,
y: UIScreen.main.bounds.height / 2 + startPosition.height + currentDrag.height)
.gesture(
DragGesture()
.onChanged { gesture in
currentDrag = gesture.translation
}
.onEnded { _ in
startPosition.width += currentDrag.width // 開始位置を更新
startPosition.height += currentDrag.height
currentDrag = .zero // ドラッグ量をリセット
}
)
}
}
onEnded
でドラッグ位置を保持する事とで場所を保持したままにすることができます!