ios 小部件在 TimelineProvider 中加载远程图像 url?
Posted
技术标签:
【中文标题】ios 小部件在 TimelineProvider 中加载远程图像 url?【英文标题】:ios widget load remote image url in TimelineProvider? 【发布时间】:2021-01-08 07:05:00 【问题描述】:我正在我的小部件上显示股票图表(例如:https://example.com/my_img.png)。
作为对 SO & Apple dev 4rum 的调查,我找不到可行的解决方案。
据我所知,Widget 不支持异步图片加载,所以我的方法是在我们 getTimeline() 的时候获取图片,然后将图片数据传递给 Entry 以便稍后显示。
但是我不能让它工作,谁能告诉我如何解决它?
简而言之,它不起作用!:
// Fetch first in getTimeline()
let imgData = Data(
contentsOf: URL(string: "https://example.com/my_img.png")!
)!
// Then render it later in View
Image(uiImage: UIImage(data: imgData))
这是我所有的伪代码:
func getTimeline(...)
var imageData = nil
let url: URL = URL(string: "https://example.com/my_img.png")!
if let imgData:Data = try? Data(contentsOf: url)
imageData = imgData
var entry = SimpleEntry(...)
entry.imageData = imageData
let timeline = Timeline(entries: [entry], policy: .atEnd)
completion(timeline)
// Some where in the widget i'll show the imageData above
struct FIM_SV_Chart: View
let imageData: Data?
var body: some View
if imageData != nil, let uiImage = UIImage(data: imageData!)
Image(uiImage: uiImage)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 80, height: 26.0)
else
Image("EmptyChart")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 80, height: 26.0)
非常感谢。
【问题讨论】:
【参考方案1】:是我的错,我生成了一个不正确的图片 url 所以 imgData 是 0 字节!
这将起作用:
// Fetch first in getTimeline()
let imgData = Data(
contentsOf: URL(string: "https://example.com/my_img.png")!
)!
// Then render it later in View
Image(uiImage: UIImage(data: imgData))
【讨论】:
以上是关于ios 小部件在 TimelineProvider 中加载远程图像 url?的主要内容,如果未能解决你的问题,请参考以下文章
iOS14 Widget小组件开发(Widget Extension)