damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

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:
Mdamus/Modifiers/SwipeToDismiss.swift | 6+++++-
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