我们可以在LinkPresentation框架中从LPLinkView提取图像吗?

时间:2020-04-18 08:33:05

标签: swift xcode web-crawler api-linkpreview

我想在我的应用程序中显示一个丰富的链接,并将这些数据发送到我的服务器。 我需要访问LPLinkView视图内的图像。

如何访问其中的参数? (例如:图片,说明,标题,图标和扩展名...)

LPLinkView of URL swift

1 个答案:

答案 0 :(得分:6)

不幸的是,您无法访问LPLinkView的任何内部属性,但是可以轻松创建自己的视图。 LPLinkMetadata对象具有您所需的一切,您只需要知道如何从iconProvider的子类imageProviderNSItemProvider中提取图像即可。

UIKit(iOS)

您可以使用NSItemProvdier的{​​{1}}方法轻松获得loadObject(ofClass:)。之所以有效,是因为UIImage符合UIImage协议。

NSItemProviderReading

SwiftUI

SwiftUI的import LinkPresentation import UIKit let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) let url = URL(string: "https://stackoverflow.com/q/61286308/2101447")! LPMetadataProvider().startFetchingMetadata(for: url) { (linkMetadata, error) in guard let linkMetadata = linkMetadata, let imageProvider = linkMetadata.iconProvider else { return } print(linkMetadata.title ?? "Untitled") imageProvider.loadObject(ofClass: UIImage.self) { (image, error) in guard error == nil else { // handle error return } if let image = image as? UIImage { // do something with image DispatchQueue.main.async { imageView.image = image } } else { print("no image available") } } } Image,因此它不能符合struct。使用上面的UIKit代码获取NSItemProviderReading并从中实例化一个SwiftUI UIImage是最简单的。

Image

AppKit(macOS)

... if let uiImage = loadedImage as? UIImage { let image = Image(uiImage: uiImage) } 姐妹不同,UIImage不符合NSImage,这意味着您必须使用NSItemProviderReading较旧的NSItemProvdier方法。

您需要自己指定loadItem(forTypeIdentifier:options:)并从typeIdentifier初始化NSImage,否则几乎一样。

Data
相关问题