Skip to content

Instantly share code, notes, and snippets.

@gabrieltheodoropoulos
Created November 1, 2020 17:56
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save gabrieltheodoropoulos/59dc104163b5718018c6c55309b110fb to your computer and use it in GitHub Desktop.
Save gabrieltheodoropoulos/59dc104163b5718018c6c55309b110fb to your computer and use it in GitHub Desktop.
PressActions modifier - Handle press and release events in SwiftUI
struct PressActions: ViewModifier {
var onPress: () -> Void
var onRelease: () -> Void
func body(content: Content) -> some View {
content
.simultaneousGesture(
DragGesture(minimumDistance: 0)
.onChanged({ _ in
onPress()
})
.onEnded({ _ in
onRelease()
})
)
}
}
extension View {
func pressAction(onPress: @escaping (() -> Void), onRelease: @escaping (() -> Void)) -> some View {
modifier(PressActions(onPress: {
onPress()
}, onRelease: {
onRelease()
}))
}
}
@gabrieltheodoropoulos
Copy link
Author

Hi @jesseauciello. As it seems other tasks took priority and I totally neglected this. Sorry for that, I'll try to work on it the soonest.

@MartinAtElitappar
Copy link

Hi, thanks for the article "Handle Press And Release Events in SwiftUI". I will try to use ButtonStyle or PrimitiveButtonStyle instead. The configuration.isPressed can be used for checking if the button is pressed or released. /Martin

@NyiYe
Copy link

NyiYe commented Feb 23, 2023

how to implement both on tap gesture and pressAction .

@MartinAtElitappar
Copy link

Hi @NyiYe , Are you talking about buttons? Can it work for you to make a custom ButtonStyle and use isPressed? You have the action in the button for the tap gesture. I attach an article "Creating Custom Button Styles In SwiftUI" from Gabriel. (You can maybe explain you needs more?) /Martin

@loryhuz
Copy link

loryhuz commented Oct 8, 2023

Unfortunately this is cancelling the scroll in a scrollview if you move your finger on the modified view

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment