【问题标题】:SwiftUI: Can't use UIActivityViewController to share an imageSwiftUI:无法使用 UIActivityViewController 共享图像
【发布时间】:2020-01-29 21:17:06
【问题描述】:

我让 UIViewControllerRepresentable 像这样将 UIActivityViewController 变形为 SwiftUI:

struct ShareSheet: UIViewControllerRepresentable {
   typealias Callback = (_ activityType: UIActivity.ActivityType?, _ completed: Bool, _ returnedItems: [Any]?, _ error: Error?) -> Void
   let activityItems: [Any]
   let applicationActivities: [UIActivity]? = nil
   let excludedActivityTypes: [UIActivity.ActivityType]? = nil
   let callback: Callback? = nil

func makeUIViewController(context: Context) -> UIActivityViewController {
    let controller = UIActivityViewController(
        activityItems: activityItems,
        applicationActivities: applicationActivities)
    controller.excludedActivityTypes = excludedActivityTypes
    controller.completionWithItemsHandler = callback
    return controller
}

func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) {
    // nothing to do here
}

问题是:当我传递 UIImage 对象时,它的工作原理是这样的:

ShareSheet(activityItems: [UIImage(named: "doc")!])

但如果我传递 Image 对象,它就不起作用,像这样:

ShareSheet(activityItems: [Image("doc")])

在我的应用程序中,我只有 Image 对象中的图像而不是 UIImage,所以,我可以将 Image 变形为 UIImage 还是我必须做其他事情?

【问题讨论】:

  • 看起来 Image 永远不会用于创建 UIImage。我找到了这个explanation,但是这里的答案从 UIImage 创建了一个图像。
  • 我在文档中找不到它(还),但 UIKit 没有设置为处理 SwiftUI 项目,因此需要通过 UIViewControllerRepresentable. 桥接 UIKit 项目。就像上面链接中指出的@jnblanchard 一样,您最简单的答案看起来像您需要将这些图像转换为 UIImages 以传递它们。 Image 的文档还表明它是一个后期绑定令牌,它依赖于它的环境来解析。如果你给它一个 UIKit 环境,我怀疑它没有这样做的上下文。 developer.apple.com/documentation/swiftui/image
  • 我想如果我可以将 Image 变形为 UIImage 问题就会解决!但是怎么办?

标签: xcode swiftui uiactivityviewcontroller


【解决方案1】:

原因是 Image("doc") 是 UIKit 无法处理的 View 类型。相反,UIImage(named: "doc") 是 UIImage 类型,这就是它起作用的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    相关资源
    最近更新 更多