36 lines
996 B
Swift
36 lines
996 B
Swift
//
|
|
// SwipeToDismiss.swift
|
|
// damus
|
|
//
|
|
// Created by Joel Klabo on 1/18/23.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct SwipeToDismissModifier: ViewModifier {
|
|
let minDistance: CGFloat?
|
|
var onDismiss: () -> Void
|
|
@State private var offset: CGSize = .zero
|
|
|
|
func body(content: Content) -> some View {
|
|
content
|
|
.offset(y: offset.height)
|
|
.animation(.interactiveSpring(), value: offset)
|
|
.simultaneousGesture(
|
|
DragGesture(minimumDistance: minDistance ?? 10)
|
|
.onChanged { gesture in
|
|
if gesture.translation.width < 50 {
|
|
offset = gesture.translation
|
|
}
|
|
}
|
|
.onEnded { _ in
|
|
if abs(offset.height) > 100 {
|
|
onDismiss()
|
|
} else {
|
|
offset = .zero
|
|
}
|
|
}
|
|
)
|
|
}
|
|
}
|