Swipe to Dismiss Images

Closes: #343
This commit is contained in:
Joel Klabo
2023-01-18 12:52:07 -08:00
committed by William Casarin
parent 8ffa8446b6
commit 1ecfb0487e
4 changed files with 54 additions and 2 deletions

View File

@@ -179,6 +179,9 @@ struct ImageView: View {
.offset(x: offset.width + offsetState.width, y: offset.height + offsetState.height)
.gesture(SimultaneousGesture(zoomGesture, dragGesture))
.gesture(doubleTapGesture)
.modifier(SwipeToDismissModifier(onDismiss: {
presentationMode.wrappedValue.dismiss()
}))
}.padding(.bottom, 50) // Ensure carousel appears beneath
}

View File

@@ -0,0 +1,34 @@
//
// SwipeToDismiss.swift
// damus
//
// Created by Joel Klabo on 1/18/23.
//
import SwiftUI
struct SwipeToDismissModifier: ViewModifier {
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()
.onChanged { gesture in
if gesture.translation.width < 50 {
offset = gesture.translation
}
}
.onEnded { _ in
if abs(offset.height) > 100 {
onDismiss()
} else {
offset = .zero
}
}
)
}
}

View File

@@ -78,6 +78,9 @@ struct ProfileZoomView: View {
.offset(x: offset.width + offsetState.width, y: offset.height + offsetState.height)
.gesture(SimultaneousGesture(zoomGesture, dragGesture))
.gesture(doubleTapGesture)
.modifier(SwipeToDismissModifier(onDismiss: {
presentationMode.wrappedValue.dismiss()
}))
}
}