SwiftUI:如何让.draggable()立即响应而不延迟?

问题描述 投票:0回答:1

在我的 SwiftUI 应用程序中,拖放功能是一项核心功能,尤其是在经常使用它的特定屏幕上。

默认情况下,在拖动开始之前有一个小的延迟(长按),但我希望用户能够立即抓取并移动项目而无需等待。有没有一种简单的方法可以让 .draggable() 立即响应,而不需要长按?

任何指导将不胜感激!我宁愿避免使用 DragGesture 重新实现整个功能,因为我的应用程序已经使用 .draggable() 设置了。

这是我迄今为止尝试过的:

将allowHitTesting 设置为 false — 拖放根本不起作用。 尝试在正常和调试模式下运行 - 相同的行为仍然存在。 启用编辑模式 - 相同的行为仍然存在。

Text(s)
    .padding()
    .background(.red)
    .draggable(s)
ios swift swiftui draggable
1个回答
0
投票

.draggable()
的默认行为有时会涉及延迟,尤其是在移动设备上,它需要在开始之前进行长按手势。要使其立即响应,您可以使用同步手势立即触发拖动。

您可以使用

DragGesture
并将其与
.gesture()
组合以获得即时拖动响应。

    struct InstantDraggableView: View {
    @State private var offset: CGSize = .zero  // To track the position
    
    var body: some View {
        Text("Drag Me")
            .padding()
            .background(Color.blue)
            .cornerRadius(10)
            .foregroundColor(.white)
            .offset(offset)  // Update position based on drag
            .gesture(
                DragGesture()
                    .onChanged { gesture in
                        offset = gesture.translation  // Update offset as user drags
                    }
                    .onEnded { _ in
                        // Optional: Add logic if you want to reset or constrain the drag
                        }
                )
        }
    }
    struct InstantDraggableView_Previews: PreviewProvider {
    static var previews: some View {
        InstantDraggableView()
    }
}

不用依赖

.draggable()
(具有内置延迟),使用
DragGesture()
可以让您完全控制拖动行为。 如果您需要将其与其他手势(例如点击或长按)结合使用,您可以使用
.simultaneousGesture()

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.