【问题标题】:SwiftUI - onDrag Argument type 'NSImage' does not conform to expected type 'NSItemProviderWriting'SwiftUI - onDrag 参数类型“NSImage”不符合预期类型“NSItemProviderWriting”
【发布时间】:2020-03-24 04:54:58
【问题描述】:

我正在尝试几种在 macOS 中实现图像拖动(从我的应用程序到其他应用程序)的方法,但它们都不起作用。 图片是一个 Data() 对象,它取自剪贴板,而不是 URL。

我的代码:

.onDrag {
    return NSItemProvider(object: NSImage(data: self.item.value) ?? NSImage())
}

上面写着

参数类型“NSImage”不符合预期类型 'NSItemProviderWriting'

我尝试了文字,它正在工作。但找不到拖动图像的方法。

【问题讨论】:

  • @Asperi 这不是很有帮助,因为我正在做的是实现将图像从我的应用程序拖动到其他应用程序。本教程只是关于拖动以在应用程序内移动视图。
  • 我会将self.item.value 数据作为文件缓存在某处,并以kUTTypeURL 类型将NSItemProvider 传递到该存储图像的URL - 这将被更多目的地(包括搜索框)接受。

标签: macos swiftui drag nsimage


【解决方案1】:

从测试 SwiftUI 应用程序到 TextEdit 的拖放操作如下。测试图像 image 存储在 Assets.xcassets

Image("image")
    .onDrag {
        NSItemProvider(item: NSImage(named: "image")?.tiffRepresentation as NSSecureCoding?, 
                       typeIdentifier: kUTTypeTIFF as String)
    }

【讨论】:

  • 我尝试了我的案例,但它不起作用。我无法将图像从应用程序拖到 Google 搜索图像或 TextEdit。 NSImage() 不为空。我可以显示它。返回 NSItemProvider(item: NSImage(data: self.historyItem.value)?.tiffRepresentation as NSSecureCoding?, typeIdentifier: kUTTypeTIFF as String)。已编辑:不能拖动。
  • 我已经使用 Xcode 11.4 / macOS 10.15.3 进行了测试 - D&D 在一般情况下可以正常工作,因此您的数据中有些不太好。 self.historyItem.value 是什么?顺便说一句,你有没有试过拖到最后,默认情况下源中没有预览,所以它只出现在 TextEdit 上。
  • self.historyItem.value 是一个 Data() 对象,取自 pasteboardItem.data(forType: .tiff)。这与数据无关。我已经尝试使用存储在 Assets.xcassets 中的图像,但它不起作用。我使用 Xcode 11.2.1 / macOS 10.15.2。也许我应该更新我的操作系统和 Xcode。
  • 使用 Xcode 11.2.1 / macOS 10.15.3 测试提供的快照 - 工作正常。
  • 在 RichText 模式下(默认)TextEdit 允许包含图像。网络中的搜索框接受文本和 url,而不是图像数据。如果从 TextEdit 中 d&d 图像也不会发生任何事情。
猜你喜欢
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多