繁体   English   中英

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

[英]SwiftUI | onDrag - customize (dragItem) preview image appearance

我一直想知道是否有任何方法可以自定义使用onDrag时被拖动的viewpreview image

如您所见,默认情况下, preview image是视图的稍大的不透明度图像。

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

我所说的自定义是指拥有一些自定义image或自定义viewpreview image (都没有默认的不透明度)

有没有人有想法?

我曾尝试使用previewImageHandler并且一般来说,阅读了很多关于NSItemProvider 但对我来说,这似乎对 SwiftUI 来说是不可能的?

使用UIKit可以自定义UIDragItem - 使用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启动并返回带有preview imageNSItemProvider ,这将是我想要的图像。 但是我不能让这两个手势同时进行,你必须先关闭一个才能开始第二个。

谢谢!

iOS的15增加了一个API来做到这一点-你可以指定View要用于preview onDrag(_:预览:)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM