UIKit:创建 UIImage 快照并将其用作 shareSheet 中的缩略图

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

我正在 iOS 应用程序中实现快照共享,因此 UIImage 是从 View 创建的,它位于共享表中并且工作正常,但我无法显示此 UIImage,因为缩略图是 ShareSheet。

func actionSheet(image: UIImage) {
        let urlShare = image
        let activityVC = UIActivityViewController(activityItems: [urlShare], applicationActivities: nil)
        UIApplication.shared.windows.first?.rootViewController?.present(activityVC, animated: true, completion: nil)
    }

UIImage 是动态创建的,因此应用程序中没有它的 url

我怎样才能让它显示出来?

uikit uiimage ios-sharesheet
1个回答
1
投票

我的问题得到了很好的回答: Jake Bloom:在 iOS 和 Android 上使用共享表

import Foundation
import SwiftUI
import LinkPresentation

class ShareImage: UIActivityItemProvider {
  var image: UIImage

  override var item: Any {
    get {
      return self.image
    }
  }

  override init(placeholderItem: Any) {
    guard let image = placeholderItem as? UIImage else {
      fatalError("Couldn't create image from provided item")
    }

    self.image = image
    super.init(placeholderItem: placeholderItem)
  }

  @available(iOS 13.0, *)
  override func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? {

    let metadata = LPLinkMetadata()
    metadata.title = "Result Image"

    var thumbnail: NSSecureCoding = NSNull()
    if let imageData = self.image.pngData() {
      thumbnail = NSData(data: imageData)
    }

    metadata.imageProvider = NSItemProvider(item: thumbnail, typeIdentifier: "public.png")

    return metadata
  }

}

然后:

func actionSheet(image: UIImage?) {
        guard let data = image else { return }
        let item = ShareImage(placeholderItem: data)
        let activityViewController = UIActivityViewController(activityItems: [item], applicationActivities: nil)
        
        UIApplication.shared.windows.first?.rootViewController?.present(activityViewController, animated: true, completion: nil)
    }
© www.soinside.com 2019 - 2024. All rights reserved.