如何在重新加载视图控制器后仍然显示 progressView 的进度?
how to still show the progress of progressView after reloading the view controller?
这是我在 swift 上的第一个问题,我在互联网上找不到任何答案。我有一个从 url 下载 pdf 文件的下载按钮,还有一个向用户显示下载进度的 progressView。一切正常,但是当我下载文件并重新加载视图控制器时,progressView 的进度重置为零。即使在重新加载 viewController.
后,我如何仍然显示下载进度
我正在传递另一个 viewController
的 url
请帮助我。
这是我的代码
class CellDetailsViewController: UIViewController , URLSessionDownloadDelegate{
var download = ""
var downloadTask : URLSessionDownloadTask!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func download(_ sender: Any) {
guard let url = URL(string: download)else {return}
let urlSession = URLSession(configuration: .default, delegate: self, delegateQueue: OperationQueue())
downloadTask = urlSession.downloadTask(with: url)
downloadTask.resume()
print("downloading")
}
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
print("download Location", location)
let fileManager = FileManager.default
let documentPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let PdfName = documentPath.appendingPathComponent("\(name).pdf")
try? fileManager.removeItem(at: PdfName)
do{
try fileManager.moveItem(at: location, to: PdfName)
}catch{
print("copy error\(error.localizedDescription)")
}
}
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
if totalBytesExpectedToWrite > 0 {
let progress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
DispatchQueue.main.async {
self.progressView.progress = progress
print(totalBytesExpectedToWrite)
if progress == 1 {
self.progressView.isHidden = true
}
}
}
}
}
您可以将静态变量存储在其他地方的结构中。我会创建一个新文件,您可以将其存储在“模型”文件夹中并执行如下操作:
struct staticVariableStorage {
static var fileProgress : Double = 0.0 }
然后您可以通过将新值设置为
在您的代码中访问它
staticVariableStorage.fileProgress
这不应该受到重置 ViewController 的影响,因为它首先与 ViewController 分开。
这是我在 swift 上的第一个问题,我在互联网上找不到任何答案。我有一个从 url 下载 pdf 文件的下载按钮,还有一个向用户显示下载进度的 progressView。一切正常,但是当我下载文件并重新加载视图控制器时,progressView 的进度重置为零。即使在重新加载 viewController.
后,我如何仍然显示下载进度我正在传递另一个 viewController
的 url请帮助我。
这是我的代码
class CellDetailsViewController: UIViewController , URLSessionDownloadDelegate{
var download = ""
var downloadTask : URLSessionDownloadTask!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func download(_ sender: Any) {
guard let url = URL(string: download)else {return}
let urlSession = URLSession(configuration: .default, delegate: self, delegateQueue: OperationQueue())
downloadTask = urlSession.downloadTask(with: url)
downloadTask.resume()
print("downloading")
}
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
print("download Location", location)
let fileManager = FileManager.default
let documentPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let PdfName = documentPath.appendingPathComponent("\(name).pdf")
try? fileManager.removeItem(at: PdfName)
do{
try fileManager.moveItem(at: location, to: PdfName)
}catch{
print("copy error\(error.localizedDescription)")
}
}
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
if totalBytesExpectedToWrite > 0 {
let progress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
DispatchQueue.main.async {
self.progressView.progress = progress
print(totalBytesExpectedToWrite)
if progress == 1 {
self.progressView.isHidden = true
}
}
}
}
}
您可以将静态变量存储在其他地方的结构中。我会创建一个新文件,您可以将其存储在“模型”文件夹中并执行如下操作:
struct staticVariableStorage {
static var fileProgress : Double = 0.0 }
然后您可以通过将新值设置为
在您的代码中访问它staticVariableStorage.fileProgress
这不应该受到重置 ViewController 的影响,因为它首先与 ViewController 分开。