ios - 快速用户界面 | onDrag - 自定义(dragItem)预览图像外观

我一直想知道是否有任何方法可以自定义使用 onDrag 时被拖动的 viewpreview 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 并返回 NSItemProviderpreview 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/

相关文章:

javascript - amazon-cognito-identity-js - 忘记了无效用户的

python - 如何在python中调整直方图上的字体大小

flutter - 有没有办法使标签栏指示器在角落向下弯曲?

php - 发送 QUERY 数据包时出错

php - Controller 之前的 Yii2 url 管理器参数

flutter - 飞镖 :tml and dart:js not found error flut

android - 切换 AdMob 帐户以更改国家/地区的步骤

java - Java 库导出的相对路径

reactjs - 在 react 中从两个连接的api形成一个数组

c - 在控制台中移动光标和打印字符不适用于 sleep