我一直想知道是否有任何方法可以自定义使用 onDrag
时被拖动的 view
的 preview image
?
如您所见,默认情况下,预览图像
是略大的不透明度图像。
根据我的发现,preview image
是在拖动过程的最开始生成的。但是我找不到改变它的方法。
我所说的自定义是指拥有一些自定义图像
或自定义 View
的预览图像
。 (两者都没有默认的不透明度)
有没有人有想法?
我试过使用previewImageHandler通常,阅读很多关于 NSItemProvider
的内容。但对我来说,这似乎是 SwiftUI 做不到的事情?
使用 UIKit
可以自定义 UIDragItem
- 类似于使用 previewProvider
的东西:Here
这是我的演示代码:
struct ContentView: View {
var body: some View {
DraggedView()
.onDrag({ NSItemProvider() })
}
private struct DraggedView: View {
var body: some View {
RoundedRectangle(cornerRadius: 20)
.frame(width: 120, height: 160)
.foregroundColor(.green)
}
}
}
我将使用它在 LazyVGrid
中进行拖放,因此自定义 gestures
很遗憾没有选择。
我的第二个想法是同时做一个手势,首先将 item
更改为要拖动到其他位置,然后启动 onDrag
并返回 NSItemProvider
和 preview image
这将是我想要的那个。但我不能同时使用这两个手势,您必须先取消一个才能开始第二个。
谢谢!
最佳答案
iOS 15 添加了一个 API 来执行此操作 - 您可以指定 View
以用于 preview
。 onDrag(_:preview:)
RoundedRectangle(cornerRadius: 20)
.frame(width: 120, height: 160)
.foregroundColor(.green)
.onDrag {
NSItemProvider()
} preview: {
RoundedRectangle(cornerRadius: 18)
.frame(width: 100, height: 140)
.foregroundColor(.green)
}
https://stackoverflow.com/questions/63533052/