作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想进一步自定义从我的应用程序共享内容的方式,而不是提供 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
}
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")
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/
我是一名优秀的程序员,十分优秀!