.dropDestination 无法使用我的自定义可传输类型执行

问题描述 投票:0回答:1

我已经定义了

import SwiftUI
import UniformTypeIdentifiers

enum LayerType: String, Codable, RawRepresentable {
    case text
    case image
}

struct TransferableLayer: Identifiable, Hashable, Codable, Transferable {
    var id: UUID
    var type: LayerType
    
    init(id: UUID, type: LayerType) {
        self.id = id
        self.type = type
    }

    static var transferRepresentation: some TransferRepresentation {
        CodableRepresentation(contentType: .transferableLayer)
    }
}

extension UTType {
    static let transferableLayer = UTType(exportedAs: "co.customUTType.transferableLayer")
}

注意:我也将其添加到导出类型标识符中:

我还有

LayersView
,我将 .draggable 属性分配给文本:

 ForEach(Array(textLayers.enumerated()), id: \.element.id) { index, textLayer in
                    ...
                        Text(textLayer.text)
                           .draggable(TransferableLayer(id: textLayer.id, type: LayerType.text))
...
}

我添加了 PanelView

.dropDestination(for: TransferableLayer.self) { droppedLayers, location in
   print("I'm inside dropDestination")
}
当我将 textLayer 拖放到面板上时,dropDestination 中的

print()
代码不会调用。但它正确地显示了预览,并且我看到了我在那里所做的更改。

更新:

我在 SO 上搜索了类似的问题/答案,发现了这个: 在 macOS 的 Swiftui 中使用可传输协议拖放自定义类型

可传输协议及其如何与 MacOS 上的自定义类型配合使用似乎存在问题。顺便说一句,它可以作为 Mac Catalyst 在受支持的目标上运行

swift macos swiftui drag-and-drop draggable
1个回答
0
投票

不确定这是否是一个可行的解决方法,但我发现在导出类型标识符中使用 public.text 而不是 com.public.data 似乎确实会产生影响(com.public.data 不会触发,但 public.text 会触发)触发 dropDestination)。

© www.soinside.com 2019 - 2024. All rights reserved.