【发布时间】:2020-12-11 10:36:13
【问题描述】:
我一直想知道是否有任何方法可以自定义使用onDrag 时被拖动的view 的preview image?
如您所见,preview image 默认情况下是视图的不透明图像稍大。
根据我的发现,在拖动过程的最开始会生成一个preview image。但我找不到改变它的方法。
我所说的自定义是指有一些自定义image 或自定义view 的preview image。 (都没有默认的不透明度)
有人有想法吗?
我尝试过使用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,然后是一个我想要的。但是我不能让这两个手势同时进行,你必须先关闭一个才能开始第二个。
谢谢!
【问题讨论】:
-
明确记载:“应用
onDrag(_:)修饰符会为该视图添加适当的拖放手势。当拖动操作开始时,会生成并使用该视图的渲染作为预览图像。” -
所以没有办法自定义这个?或者有什么解决方法?
-
为什么不呢?从头开始,从 LongPressGesture 和 DragGesture 的低级别开始,以及其他所有手动操作...很长的路要走,但可能。
-
我试过这个但失败了,这对我来说太多了,因为要考虑的事情太多了,我认为这不如苹果 onDrag,onDrop。
-
来自我很长的搜索。无法控制为
onDrag(_:)修饰符生成的预览图像。我更想获得预览的参考,以便将其保存为图像,但我被卡住了。