答案 0 :(得分:6)
不幸的是,您无法访问LPLinkView
的任何内部属性,但是可以轻松创建自己的视图。 LPLinkMetadata
对象具有您所需的一切,您只需要知道如何从iconProvider
的子类imageProvider
和NSItemProvider
中提取图像即可。
您可以使用NSItemProvdier
的{{1}}方法轻松获得loadObject(ofClass:)
。之所以有效,是因为UIImage
符合UIImage
协议。
NSItemProviderReading
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
与...
if let uiImage = loadedImage as? UIImage {
let image = Image(uiImage: uiImage)
}
姐妹不同,UIImage
不符合NSImage
,这意味着您必须使用NSItemProviderReading
较旧的NSItemProvdier
方法。
您需要自己指定loadItem(forTypeIdentifier:options:)
并从typeIdentifier
初始化NSImage
,否则几乎一样。
Data