Swift ';随需应变资源&x27;下载进度指示器
我有一个SwiftUI项目,我正在利用苹果的按需资源(ODR) 我想显示一个进度条,指示资源的下载进度 我所尝试的: 以下代码请求ODR资源,将Swift ';随需应变资源&x27;下载进度指示器,swift,swiftui,on-demand-resources,Swift,Swiftui,On Demand Resources,我有一个SwiftUI项目,我正在利用苹果的按需资源(ODR) 我想显示一个进度条,指示资源的下载进度 我所尝试的: 以下代码请求ODR资源,将NSBundleResourceRequest存储在静态属性中,以便在其他地方可用: class OnDemandResources { static var request: NSBundleResourceRequest? func loadMusic() { OnDemandResources.request =
NSBundleResourceRequest
存储在静态属性中,以便在其他地方可用:
class OnDemandResources {
static var request: NSBundleResourceRequest?
func loadMusic() {
OnDemandResources.request = NSBundleResourceRequest(tags: Set(["Music"]))
OnDemandResources.request?.conditionallyBeginAccessingResources { resourcesAvailable in
DispatchQueue.main.async {
if resourcesAvailable {
//Resource is already on the device. No need to download.
} else {
//Resource needs to be downloaded.
OnDemandResources.request?.beginAccessingResources { error in
DispatchQueue.main.async {
if error == nil {
//Success
}
}
}
}
}
}
}
}
然后,我使用UIViewRepresentable
连接UIProgressView
,将视图的observedProgress
属性设置为前面提到的静态请求对象的progress
属性:
struct ProgressBar: UIViewRepresentable {
func makeUIView(context: Context) -> UIProgressView {
let progressView = UIProgressView()
// Use the static NSBundleResourceRequest:
progressView.observedProgress = OnDemandResources.request?.progress
return progressView
}
func updateUIView(_ uiView: UIProgressView, context: Context) {
}
}
根据,设置observedProgress
属性应导致进度值自动更改:
设置此属性后,进度视图将使用从进度对象接收的信息自动更新其进度值
最后,我在SwiftUI视图中使用我的ProgressBar
,如下所示:
struct MyView: View {
var body: some View {
ProgressBar()
}
}
结果:
进度条从不显示任何进度;这只是一个空白条
问题:
为什么我的ProgressBar
不显示ODR下载进度?我做错了什么?是这样做的,还是有更简单的方法
谢谢大家! 您是否尝试了第4.6节所示的方法?连接一个关键路径观察器,然后监听它,也许你可以尝试将它调整为swift,看看是否适合你