【发布时间】:2021-08-16 20:19:17
【问题描述】:
我正在尝试允许我的用户通过文本或社交媒体与叠加层共享图像。
我正在使用以下扩展程序成功创建图像(我知道是因为它显示在相册中):
extension View {
func snapshot() -> UIImage {
let controller = UIHostingController(rootView: self)
let view = controller.view
let targetSize = controller.view.intrinsicContentSize
view?.bounds = CGRect(origin: .zero, size: targetSize)
view?.backgroundColor = .clear
let renderer = UIGraphicsImageRenderer(size: targetSize)
return renderer.image { _ in
view?.drawHierarchy(in: controller.view.bounds, afterScreenUpdates: true)
}
}
}
当我“分享”时,它会确认图像存在(分享表会更改其选项),但图像要么不存在,要么是一个空白的正方形。
我这样称呼它:
let myImage = textView.snapshot() //uses the snapshot extension above
ShareSheet(activityItems: ["my app name", myImage])
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 ///[.postToFacebook] //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
}
}
【问题讨论】:
-
你能展示如何设置 myImage 的代码吗?理想情况下是minimal reproducible example?
-
感谢您的帮助。编辑是否使上面更清楚?让 myImage = textView.snapshot()
标签: swiftui