根据WWDC20和其他文章,从给定的URL中获取图像URL似乎很容易。下面是我的启动代码。这只是列出了一个随机的url列表,并应该为url的丰富链接预览获取imageurl。只需使用LPMetadataProvider获取元数据。但我不能让它显示图像的URL。有人知道SwiftUI是怎么做的吗?
import SwiftUI
import LinkPresentation
struct ExampleHTTPLinks: View {
var links = [ "https://www.google.com", "https://www.hotmail.com"]
let metadataProvider = LPMetadataProvider()
var body: some View {
List(links, id:\.self) { item in
HStack {
Text(item)
Image(systemName: "heart.fill")
metadataProvider.startFetchingMetadata(for: URL(string: item)!) { metadata, error in
if error != nil {
// The fetch failed; handle the error.
// Examples: server doesn't respond, is too slow, user doesn't have network.
return
}
let linkView = LPLinkView(metadata: metadata)
Image(linkView.image)
// Make use of the fetched metadata.
}
}
}
}
}
struct ExampleHTTPLinks_Previews: PreviewProvider {
static var previews: some View {
ExampleHTTPLinks()
}
}
2条答案
按热度按时间gzszwxb41#
下面是一个工作版本:
如果您尝试将LPMetadataProvider用于多个调用,它会发出抱怨,因此我将它移到了视图模型中。
该图像由
NSImageProvider
出售--您可以看到loadObject
调用是从中获取UIImage
的。请注意,如果您想使用Apple提供的开箱即用的演示文稿,则可以使用
LPLinkView
。因为它是一个UIView
,要在SwiftUI中使用它,你必须用UIViewRepresentable
Package 它:flseospp2#
接受的答案做的工作。这是一个改进的版本,具有缓存和Swift并发性。
如果您的目标不是
macOS
,请将NS
替换为UI
。