📅  最后修改于: 2023-12-03 15:18:06.841000             🧑  作者: Mango
The onLongPressGesture
is a SwiftUI gesture modifier available in tvOS that allows you to recognize and handle long press gestures on TV devices. A long press gesture occurs when the user presses and holds a finger on the touchpad for a specific duration.
This gesture modifier provides a convenient way to add complex interactions to your tvOS app by triggering actions based on long press gestures. It is especially useful for implementing context menus, tooltips, or any other custom behavior that requires a prolonged touch.
The onLongPressGesture
gesture modifier can be applied to any SwiftUI view. It takes a closure as a parameter, which will be executed when the long press gesture is recognized. The closure can perform specific actions or update the state of the view.
.onLongPressGesture(
minimumDuration: Double = 0.5,
maximumDistance: CGFloat = 10,
pressing: ((Bool) -> Void)? = nil,
perform: (() -> Void)? = nil
) -> some View
minimumDuration
: The minimum duration (in seconds) required for the long press gesture to be recognized. The default value is 0.5 seconds.maximumDistance
: The maximum allowable movement (in points) for the long press gesture to be recognized. The default value is 10 points.pressing
: An optional closure that is called when the user starts pressing or stops pressing the touchpad. It receives a boolean parameter indicating the pressing state.perform
: An optional closure that is called when the long press gesture is recognized. It can perform specific actions or update the view's state.import SwiftUI
struct ContentView: View {
@State private var isContextMenuVisible = false
var body: some View {
Text("Press and hold to show the context menu")
.onLongPressGesture {
isContextMenuVisible = true
}
.contextMenu(isPresented: $isContextMenuVisible) {
Button(action: {
// Handle context menu item selection
}) {
Text("Option 1")
Image(systemName: "square.and.arrow.up")
}
Button(action: {
// Handle context menu item selection
}) {
Text("Option 2")
Image(systemName: "trash")
}
}
}
}
In this example, we use the onLongPressGesture
modifier to recognize a long press gesture on the Text
view. When the gesture is recognized, we set the isContextMenuVisible
state variable to true, which shows the context menu. The context menu contains two options that can be selected by the user.
import SwiftUI
struct ContentView: View {
@State private var isHighlighted = false
var body: some View {
Text("Press and hold to highlight")
.padding()
.background(isHighlighted ? Color.yellow : Color.clear)
.onLongPressGesture(
minimumDuration: 1,
maximumDistance: 0,
pressing: { isPressing in
isHighlighted = isPressing
}
)
}
}
In this example, we apply the onLongPressGesture
modifier to the Text
view and provide a closure for the pressing
parameter. The closure updates the isHighlighted
state variable based on the pressing state of the long press gesture. When the user starts pressing, the view background color changes to yellow, and it returns to the default state when the user stops pressing.
The onLongPressGesture
gesture modifier in tvOS allows you to handle long press gestures and add interactivity to your app. Whether you want to implement custom interactions or context menus, this modifier provides a flexible and straightforward way to incorporate long press gestures into your SwiftUI views.