gpt4 book ai didi

iOS:通过 UIActivityViewController 共享不适用于 UIActivityItemSource

转载 作者:行者123 更新时间:2023-12-01 15:44:25 25 4
gpt4 key购买 nike

我想进一步自定义从我的应用程序共享内容的方式,而不是提供 UIActivityViewController带有图片和标题的使用 UIActivityItemSource协议(protocol)来实现提供此内容的方法。

所以我为我的模型创建了扩展 Scan像这样:

extension Scan: UIActivityItemSource {
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return self.title as Any
}

func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
return self.orderedDocuments.map({ $0.image }) as Any
}

func activityViewController(_ activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: UIActivity.ActivityType?, suggestedSize size: CGSize) -> UIImage? {
return self.thumbnailImage
}

func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String {
return "Scan from: \(String(describing: self.created))"
}
}

但是当我通过 Scan 的实例时到 UIActivityViewController它打开但它是空的。我看不到标题、预览或实际图像。这些方法被调用。

我正在介绍 UIActivityViewController像这样,因为没有太多可定制的:
func share(_ scan: Scan) {

let shareController = UIActivityViewController(activityItems: [scan], applicationActivities: nil)

present(shareController, animated: true)
}
Scan是核心数据实体,但我尝试创建单独的类只是为了共享,但这也不起作用。

编辑 :所以我在元数据方面取得了一些进展:
func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? {
guard let image = self.orderedDocuments.first?.image else { return nil }
let imageProvider = NSItemProvider(object: image)
let metadata = LPLinkMetadata()
metadata.imageProvider = imageProvider
metadata.title = title
return metadata
}

它至少显示正确的标题和缩略图。我见过一些应用程序甚至显示字幕和文件大小,我猜这对于内存中的图像是不可能的?

我仍然无法共享一张以上的图片。

我更新的事件 Controller 方法:
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
return self.orderedDocuments.first?.image
}

func activityViewController(_ activityViewController: UIActivityViewController, dataTypeIdentifierForActivityType activityType: UIActivity.ActivityType?) -> String {
return kUTTypePNG as String
}

最佳答案

关于:

I have seen some apps even displaying subtitle and file size which I guess is not possible for in-memory images?



这很愚蠢,但可以通过以下方式完成:

linkMetaData.originalURL = URL(fileURLWithPath: "Insert whatever info here")

例如,对于这样的结果(自定义缩略图、自定义标题和带有文件大小的副标题):

myBaby

...代码是:

func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? {

let linkMetaData = LPLinkMetadata()

// Thumbnail
linkMetaData.iconProvider = NSItemProvider(object: someValidUIImage)

// Title
linkMetaData.title = "Ohay title!"

// Subtitle with file size
let prefix = "PNG Image"

let fileSizeResourceValue = try! someValidURL.resourceValues(forKeys: [.fileSizeKey])
let fileSizeInt = fileSizeResourceValue.fileSize

let byteCountFormatter = ByteCountFormatter()
byteCountFormatter.countStyle = .file
let fileSizeString = byteCountFormatter.string(fromByteCount: Int64(fileSizeInt))

let suffix = "・\(fileSizeString)"

//👇
linkMetaData.originalURL = URL(fileURLWithPath: "\(prefix)\(suffix)")

return linkMetaData
}

关于iOS:通过 UIActivityViewController 共享不适用于 UIActivityItemSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61291139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com