SwiftUI | onDrag-自定义(dragItem)预览图像的外观

时间:2020-10-12 10:29:31

标签: ios swift swiftui

我一直在想是否有任何方法可以自定义在使用preview image时被拖动的view的{​​{1}}中的onDrag

您可能会看到,preview image默认情况下是视图的不透明图像。

根据我发现的情况,在拖动过程的开始就生成了preview image。但是我找不到改变它的方法。

我的自定义意思是拥有一些自定义image或自定义preview image的{​​{1}}。 (两者都没有默认的不透明度)

有人有主意吗?

我尝试使用previewImageHandler,并且通常,我对view有很多了解。但是对我来说,看来SwiftUI还无法做到这一点?

使用NSItemProvider可以自定义UIKit-类似于使用UIDragItemHere

这是我的演示代码:

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}},那将是我想要的。但是我不能同时使用这两个手势,您必须先取消一个手势才能开始第二个手势。

谢谢!

1 个答案:

答案 0 :(得分:2)

iOS 15 添加了一个 API 来执行此操作 - 您可以指定用于 ViewpreviewonDrag(_:preview:)

RoundedRectangle(cornerRadius: 20)
    .frame(width: 120, height: 160)
    .foregroundColor(.green)
    .onDrag {
        NSItemProvider()
    } preview: {
        RoundedRectangle(cornerRadius: 18)
            .frame(width: 100, height: 140)
            .foregroundColor(.green)
    }