commit a56a59f81de5e3983f9fb19742eba20f08779a61
parent 1d5af6ca5c67d25c90ee09c5f34a5f2b29e90344
Author: Daniel D’Aquino <daniel@daquino.me>
Date: Fri, 1 Nov 2024 17:57:39 -0700
Improve SwipeToDismiss modifier UX
This commit adds an opacity transition when swiping to dismiss an item,
to make it clear that the user is about to dismiss it.
Changelog-Changed: Swipe to dismiss on full screen carousel now shows an opacity effect for improved UX
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Diffstat:
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/damus/Modifiers/SwipeToDismiss.swift b/damus/Modifiers/SwipeToDismiss.swift
@@ -12,11 +12,15 @@ struct SwipeToDismissModifier: ViewModifier {
var onDismiss: () -> Void
@State private var offset: CGSize = .zero
@GestureState private var viewOffset: CGSize = .zero
+
+ let threshold_offset: CGFloat = 100.0
+ let minimum_opacity: CGFloat = 0.1
func body(content: Content) -> some View {
content
.offset(y: viewOffset.height)
.animation(.interactiveSpring(), value: viewOffset)
+ .opacity(max(min(1.0 - (abs(offset.height) / threshold_offset), 1.0), minimum_opacity))
.simultaneousGesture(
DragGesture(minimumDistance: minDistance ?? 10)
.updating($viewOffset, body: { value, gestureState, transaction in
@@ -28,7 +32,7 @@ struct SwipeToDismissModifier: ViewModifier {
}
}
.onEnded { _ in
- if abs(offset.height) > 100 {
+ if abs(offset.height) > threshold_offset {
onDismiss()
} else {
offset = .zero