关键词:
【中文标题】将进度条添加到下载文件[重复]【英文标题】:Add progress-bar to Download file [duplicate] 【发布时间】:2018-07-24 22:06:42 【问题描述】:我正在实现一个 ViewController 来显示以前从我的服务器下载并存储在设备本地的 PDF,它可以正常工作,但是下载 PDF 需要太多时间,我想实现一个 progress-bar 。
我的代码如下,我尝试在其中实现 @IBOutlet weak var downloadBar: UIProgressView!
。
当我得到下载所需的时间,所以我吃我的代码达到 100% 并且下载还没有结束。
class PDFViewController: UIViewController
@IBOutlet weak var pdfView: PDFView!
@IBOutlet weak var downloadBar: UIProgressView!
//*******
var downloader = Timer()
var minValue = 0
var maxValue = 100
//********
var namePDF:String?
override func viewDidLoad()
super.viewDidLoad()
downloadBar.setProgress(0, animated: false)
if let pdfUrl = URL(string: "https://miserver.com/\(namePDF!).pdf")
print(pdfUrl)
// then lets create your document folder url
let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
// lets create your destination file url
let destinationUrl = documentsDirectoryURL.appendingPathComponent(pdfUrl.lastPathComponent)
print(destinationUrl)
// to check if it exists before downloading it
if FileManager.default.fileExists(atPath: destinationUrl.path)
print("The file already exists at path")
/************** show pdf ****************/
let pdfUrl = destinationUrl.path
let rutafile = URL(fileURLWithPath: pdfUrl)
print(pdfUrl)
if let document = PDFDocument(url: rutafile)
pdfView.autoScales = true
pdfView.document = document
/************** end show pdf ****************/
// if the file doesn't exist
else
print("file doesn't exist")
downloader = Timer.scheduledTimer(timeInterval: 0.06, target: self, selector: (#selector(PDFViewController.updater)), userInfo: nil, repeats: true)
downloadBar.setProgress(0, animated: false)
// you can use NSURLSession.sharedSession to download the data asynchronously
URLSession.shared.downloadTask(with: pdfUrl, completionHandler: (location, response, error) -> Void in
guard let location = location, error == nil else return
do
// after downloading your file you need to move it to your destination url
try FileManager.default.moveItem(at: location, to: destinationUrl)
print("File moved to documents folder")
print("file has already been downloaded")
/************** show pdf ****************/
let pdfUrl = destinationUrl.path
let rutafile = URL(fileURLWithPath: pdfUrl)
print(pdfUrl)
if let document = PDFDocument(url: rutafile)
self.pdfView.autoScales = true
self.pdfView.document = document
/************** show pdf ****************/
catch let error as NSError
print(error.localizedDescription)
).resume()
@objc func updater()
if minValue != maxValue
minValue += 1
downloadBar.progress = Float(minValue) / Float(maxValue)
print(Float(minValue) / Float(maxValue))
else
minValue = 0
downloader.invalidate()
已经非常感谢你了
【问题讨论】:
你为什么使用定时器? var 下载器 = Timer().您是否还面临 IBOutlet 的问题或没有显示进度? 当您想显示进度时,为shared
调用downloadTask(with:completionHandler:)
并不是最好的方法。创建一个配置了委托的URLSession
,并正确准备委托方法,然后将downloadTask(with:)
用于创建的实例。我没有足够的时间来写答案,希望您能尽快找到正确的方向。
@Asim Progress 如果显示(进度条有效),但我的问题是它在没有完成下载文件的情况下达到 100 的时间。如何获得下载所需的时间?
***.com/q/30047706/2303865
【参考方案1】:
您可以实现 URLSessionDownloadDelegate 协议。然后使用以下方法:
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64)
if totalBytesExpectedToWrite > 0
let progress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
self.downloadBar.setProgress(progress, animated: false)
这只会在写入新字节时更新进度条。并准确估计您的下载进度。希望这会有所帮助:)
【讨论】:
如何使用这个 URLSessionDownoadDelegate 协议?我的意思是哪个类应该符合它?能详细回答一下吗? 只需将协议与您从中调用它的类保持一致,例如您要更新进度的相应 ViewController。并听听上述功能的进展情况。每次取得进度时都会调用该函数,您可以将更新的进度分配给进度条。使用Objective-c中的进度条将文件从一个地方复制到另一个地方[重复]
】使用Objective-c中的进度条将文件从一个地方复制到另一个地方[重复]【英文标题】:CopyfilefromoneplacetoanotherusingprogressbarinObjective-c[duplicate]【发布时间】:2013-05-0518:37:46【问题描述】:当我将文件从一个地方复制到另一个地方时... 查看详情
将进度条添加到wininet http上传C++
】将进度条添加到wininethttp上传C++【英文标题】:AddingprogressbartowininethttpuploadC++【发布时间】:2017-06-2304:14:55【问题描述】:我正在使用POST方法在HTTP服务器上上传二进制文件的代码:http_upload_file(PCHARszServer,PCHARszScript,PCHARszParam,P... 查看详情
数据导出进度条
...下的存贮位置,开启一个新的线程。将数据组装进程(的进度)写入redis缓存,通过定时任务不断从缓存中读取数据,页面展现为下载的进度条。3.下载B文件到本地(本地路径);( 查看详情
如何将进度条控件添加到 Matlab gui?
】如何将进度条控件添加到Matlabgui?【英文标题】:HowtoaddprogressbarcontroltoMatlabgui?【发布时间】:2011-07-1903:19:59【问题描述】:有没有现成的进度条uicontrol可以添加到matlabgui中,uicontrol还是ActiveX组件?[edit]我知道waitbar功能,我... 查看详情
图片下载进度条
】图片下载进度条【英文标题】:progressbarwhendownloadingimage【发布时间】:2010-06-2419:10:56【问题描述】:我将如何添加一个进度条来下载大图像或任何文件?这是我的代码:NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUs... 查看详情
AsyncTask 和进度条 [重复]
】AsyncTask和进度条[重复]【英文标题】:AsyncTaskandProgressBar[duplicate]【发布时间】:2014-02-0521:14:51【问题描述】:我有发送(多个文本文件)到服务器的应用程序,每个文件发送和获取响应都会更新进度条。一旦所有文件都发送完... 查看详情
将文本格式化到 Tkinter 进度条
】将文本格式化到Tkinter进度条【英文标题】:FormattingTexttotheTkinterProgressbar【发布时间】:2022-01-1910:22:30【问题描述】:我知道根据这个问题将文本添加到进度条:Displayingpercentageinttkprogressbar这对我有帮助,但我需要对答案进行... 查看详情
将加载指示器/进度条添加到 Phonegap Android 闪屏
】将加载指示器/进度条添加到PhonegapAndroid闪屏【英文标题】:Addloadingindicator/progressbartoPhonegapAndroidsplashscreen【发布时间】:2012-03-1219:02:39【问题描述】:我有一个PhoneGap1.4.1/jQueryMobile1.0.1/Android项目,它可以很好地显示res/drawable/s... 查看详情
为多个文件下载添加子进度
】为多个文件下载添加子进度【英文标题】:Addingchildprogressformultiplefiledownload【发布时间】:2016-02-0704:47:51【问题描述】:我正在我的项目中使用AFNetworking3.0下载多个文件。我想显示所有文件的单个下载进度。我将每个文件下载... 查看详情
显示下载进度条
】显示下载进度条【英文标题】:showdownloadprogressbar【发布时间】:2021-10-2604:24:50【问题描述】:在我的应用程序中,我使用执行器服务从url下载文件。现在我想添加一个水平进度条来显示下载进度。但我面临错误。如何在不使... 查看详情
下载文件时进度条不显示剩余百分比?
】下载文件时进度条不显示剩余百分比?【英文标题】:progressbarnotshowremainingbypercentwhendownloadfile?【发布时间】:2021-10-2819:28:21【问题描述】:我在Angular8上工作,我遇到问题进度条不显示部分下载假设我下载数据然后20%然后40%... 查看详情
vc下载文件+显示进度条
在codeproject里找了许久,发现这样一个VC下载文件并显示进度条的源码,于是添加了些中文注释: 1、下载线程函数: [cpp] viewplain copy print?UINT DownloadFile(LPVOID pParam) { & 查看详情
文件上传进度条[重复]
】文件上传进度条[重复]【英文标题】:Fileuploadprogressbar[duplicate]【发布时间】:2011-04-0611:20:21【问题描述】:可能重复:UploadProgressBarinPHP任何人都可以建议一种在上传文件时包含文件上传进度条的好方法。我知道这将是javascript... 查看详情
NSURLSession 下载任务 - 进度条问题
】NSURLSession下载任务-进度条问题【英文标题】:NSURLSessionDownloadTask-ProgressBarIssue【发布时间】:2016-05-0406:14:40【问题描述】:我正在处理一个非ARC项目,我必须在其中下载视频,下载后我将显示它们。我正在使用NSURLSession下载它... 查看详情
将滚动条添加到 <textarea> [重复]
】将滚动条添加到<textarea>[重复]【英文标题】:Addascrollbartoa<textarea>[duplicate]【发布时间】:2013-10-2514:25:15【问题描述】:我想在textarea中添加一个滚动条,以便它始终显示,即使没有可向下滚动的内容。如果没有可以向... 查看详情
pythonhttp下载文件并显示下载进度条
...t下载文件并写入到文件系统,利用progressbar模块显示下载进度条。其中利用request模块下载文件可以直接下载,不需要使用open方法,例如:import urllibimport requests.packages.urllib3requests.packages.urllib3.disable_warnings()url&n 查看详情
下载大文件时在进度条上设置百分比不在 0 到 100 之间
】下载大文件时在进度条上设置百分比不在0到100之间【英文标题】:SetPercentagenotbetween0and100atProgressbarwhiledownloadinglargefiles【发布时间】:2019-05-2720:54:43【问题描述】:当我下载小.png文件时,我正在尝试从服务器下载文件,但在... 查看详情
添加视图时进度条没有动画
】添加视图时进度条没有动画【英文标题】:progressbarnotanimatedwhenviewsareadded【发布时间】:2018-04-2311:51:21【问题描述】:当我将动态图像视图添加到我的表行时,我的进度条没有动画我的xml如下所示:<RelativeLayoutxmlns:android="htt... 查看详情