【发布时间】: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