我一直在想是否有任何方法可以自定义在使用preview image
时被拖动的view
的{{1}}中的onDrag
?
您可能会看到,preview image
默认情况下是视图的不透明图像。
根据我发现的情况,在拖动过程的开始就生成了preview image
。但是我找不到改变它的方法。
我的自定义意思是拥有一些自定义image
或自定义preview image
的{{1}}。 (两者都没有默认的不透明度)
有人有主意吗?
我尝试使用previewImageHandler,并且通常,我对view
有很多了解。但是对我来说,看来SwiftUI还无法做到这一点?
使用NSItemProvider
可以自定义UIKit
-类似于使用UIDragItem
:Here
这是我的演示代码:
previewProvider
我将使用它在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
和{{ 1}},那将是我想要的。但是我不能同时使用这两个手势,您必须先取消一个手势才能开始第二个手势。
谢谢!
答案 0 :(得分:2)
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)
}